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是的。尽管只使用函数会更干净。