蟒蛇归咎于另一名lambda函数
问题描述:
这是一个稍微轻薄的问题:蟒蛇归咎于另一名lambda函数
我有很多filter-map-reduce
功能的Python代码。
我发现它有点痛苦重新打字例如。
filter(lambda x: x['identity'] == 'creosote', skits)
每次。我希望能够做到像
filter(f(x['identity']==creosote),skits)
代替。我试过了:
def f(y):
f = lambda(x: y)
但这似乎并不奏效。由于
我得到一个NameError: name 'x' is not defined
我试图做到的是为“符号链接” lambda x:
的东西,这样我就不必键入它。
答
你可以这样做:
def f(x):
return x['identity'] == 'creosote'
那么你就只是做filter(f, skits)
。
没有办法有类似f(x['identity'] == 'creosote')
而不必评估表达x['identity'] == 'creosote'
之前f
被调用(这意味着,除其他事项外,可变x
具有封闭范围进行定义)。如果你想推迟执行,你必须把表达式放在一个函数中,你可以用lambda或者完整的def
来完成。
Python没有允许您按照您的建议执行“符号链接”的宏。您不能将一些文本别名到Python中的其他文本;你只能评估格式良好的表达式。 lambda
不是函数,它是Python语法的一部分,所以你不能将它别名到别的东西上,就像你不能做plus = +
然后做4 plus 3
一样。
感谢@BrenBarn,寻找更多的东西一般,但。 Lambda只是每一次输入一个口。 – 2014-11-08 04:30:01
@TahnoonPasha:就像我说的那样,没有办法绕过它。如果你不使用'lambda',那么你在函数调用之前放入函数的任何东西都会被调用。没有宏可以像你想要的那样做“符号链接”。 (你可以尝试缩短事物的其他方法,但是,用户3的答案。) – BrenBarn 2014-11-08 04:36:47
谢谢@BrenBarn – 2014-11-08 04:58:43