每当我使用lambda表达式时,都会收到此pep8警告。不建议使用lambda表达式吗?如果不是,为什么?
您遇到的PEP-8中的建议是:
始终使用def语句代替将lambda表达式直接绑定到名称的赋值语句。 是: def f(x): return 2*x 没有: f = lambda x: 2*x 第一种形式表示结果函数对象的名称专门为“ f”,而不是通用的“ ”。通常,这对于回溯和字符串表示形式更为有用。使用赋值语句消除了lambda表达式可以提供的优于显式def语句的唯一好处(即,它可以嵌入较大的表达式中)
始终使用def语句代替将lambda表达式直接绑定到名称的赋值语句。
是:
def f(x): return 2*x
没有:
f = lambda x: 2*x
第一种形式表示结果函数对象的名称专门为“ f”,而不是通用的“ ”。通常,这对于回溯和字符串表示形式更为有用。使用赋值语句消除了lambda表达式可以提供的优于显式def语句的唯一好处(即,它可以嵌入较大的表达式中)
将lambda分配给名称基本上只是复制了def-的功能-通常,最好以单一方式进行操作以避免混淆并增加清晰度。
def
lambda的合法用例是您要在不分配函数的情况下使用它,例如:
sorted(players, key=lambda player: player.rank)
通常,反对这样做的主要理由是def语句将导致更多的代码行。我对此的主要回应是:是的,这很好。除非您是打高尔夫球的人,否则不应该减少行数:一目了然。