这是一个有点轻浮的问题:
我有一段包含很多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:
,以便我不必输入它。
答案 0 :(得分:1)
你可以这样做:
def f(x):
return x['identity'] == 'creosote'
然后你会filter(f, skits)
。
在调用 f(x['identity'] == 'creosote')
之前没有x['identity'] == 'creosote'
这样的表达式f
被评估之前无法获得x
之类的东西(这意味着除其他外,变量def
必须在封闭范围内定义。如果要延迟执行,则必须将表达式放在函数中,可以使用lambda或完整lambda
。
Python没有允许你做#"符号链接的宏#34;在你建议的方式。您可以将某些文本别名为Python中的其他文本;你只能评估结构良好的表达方式。 plus = +
不是函数,它是Python语法的一部分,因此您可以将其别名替换为其他内容,就像您不能执行4 plus 3
然后执行{{ 1}}。
答案 1 :(得分:1)
如果x
与y
不同,您可以将x
和y
传递给该函数:
def f(x, y):
return (x==y)
并将该函数调用为:
filter(f(x['identity'], 'creosote'),skits)