当前位置:  开发笔记 > 编程语言 > 正文

用lambda表达式python 3.3替换defs

如何解决《用lambda表达式python3.3替换defs》经验,为你挑选了1个好方法。

我是编程的新手,但我坚持一个问题,我问自己.我做了一个这样的例子:

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> Willem Van O..:

它不完全正确,因为您不存储 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表达式存储到变量等中.这违反了样式指南.它在语义上不正确,但不被认为是良好的编码.


有趣的是看样式指南如何使用它"使用赋值语句消除了lambda表达式可以提供的唯一好处,而不是显式def语句(即它可以嵌入到更大的表达式中)" - 如果有的话只有*一个*好处,应该谨慎使用.除了作为排序的"key"参数或将函数附加到Tkinter中的小部件之外,我几乎从未找到它们的自然用途.
推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有