我是编程的新手,但我坚持一个问题,我问自己.我做了一个这样的例子:
u = 1 def method1(x): def method2(n): def method3(m): return x + n + m def method4(): global u u += 1 method4() return method3 def method5(y): return x + y return method2, method5
问题是:我可以用lambda表达式替换其中一些定义吗?我不想改变上面代码的语义.我在考虑这样的事情:
u = 1 def method1(x): def method2(n): lambda m: x + n + m def method4(): global u u += 1 method4() lambda y: x + y return method2
如果我所做的是正确的,我可以在不改变代码语义的情况下替换更多定义,或者我错了吗?
它不完全正确,因为您不存储 lambda表达式也不返回它们.一个语义上等效的程序应该是:
u = 1 def method1(x): def method2(n): method3 = lambda m: x + n + m def method4(): global u u += 1 method4() return method3 method5 = lambda y: x + y return method2, method5
我可以在不改变语义的情况下替换更多定义
我认为除非你让程序完全不可读,否则这就是它.但是请注意,您不必将所有函数转换为lambda表达式:它只是有用,有时可以提高可读性.但它本身不应该是一个目标.
注意:像@ juanpa.arrivillaga一样,不建议将lambda表达式存储到变量等中.这违反了样式指南.它在语义上不正确,但不被认为是良好的编码.