用lambda表达式python 3.3替换defs

时间:2017-01-19 21:31:14

标签: python function lambda

我是编程新手,但我遇到了一个问题,我问自己。我做了一个这样的例子:

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

如果我所做的是正确的,我可以在不改变代码语义的情况下替换更多定义,或者我错了吗?

1 个答案:

答案 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的。它在语义上不正确,但不被认为是良好的编码。