我是编程新手,但我遇到了一个问题,我问自己。我做了一个这样的例子:
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
如果我所做的是正确的,我可以在不改变代码语义的情况下替换更多定义,或者我错了吗?
答案 0 :(得分:6)
这不完全正确,因为不存储 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表达式存储到变量等中。它是针对style guidelines的。它在语义上不正确,但不被认为是良好的编码。