Python 在列表中创建函数
我注意到这个结构Python 在列表中创建函数,python,lambda,binding,Python,Lambda,Binding,我注意到这个结构 funcs = [lambda x: x**n for n in range(5)] 未能产生预期的结果,例如 [f(0.5) for f in funcs] # [0.0625, 0.0625, 0.0625, 0.0625, 0.0625] 这个问题的标准解决方案是什么?我有自己的解决方法,就是这种模式 def function_maker(n): return lambda x: x**n funcs = [function_maker(n) for n i
funcs = [lambda x: x**n for n in range(5)]
未能产生预期的结果,例如
[f(0.5) for f in funcs]
# [0.0625, 0.0625, 0.0625, 0.0625, 0.0625]
这个问题的标准解决方案是什么?我有自己的解决方法,就是这种模式
def function_maker(n):
return lambda x: x**n
funcs = [function_maker(n) for n in range(5)]
[f(0.5) for f in funcs]
# [1.0, 0.5, 0.25, 0.125, 0.0625]
我想知道这是否是个好主意。在更复杂的情况下,它会隐藏更多令人不快的惊喜吗?这非常规范,因为您需要在
n
上创建一个闭包来保留值。你可以做一行,但它很难看:
>>> funcs = [(lambda e: lambda x: x**e)(n) for n in range(5)]
>>> [f(0.5) for f in funcs]
[1.0, 0.5, 0.25, 0.125, 0.0625]
啊好的。这是我在lambda表达式中的
函数\u maker
?@innsfree是的。尽管只使用函数会更干净。