在 python 中创建函数列表(python 函数关闭错误?)

use*_*674 5 python closures function

我很了解函数式编程。我想创建一个函数列表,每个函数选择列表中的一个不同元素。我已将我的问题简化为一个简单的示例。这当然是一个 Python 错误:

fun_list = []
for i in range(5):
    def fun(e):
        return e[i]
    fun_list.append(fun)

mylist = range(10)
print([f(mylist) for f in fun_list])
Run Code Online (Sandbox Code Playgroud)

“显然”它应该返回 [0,1,2,3,4]。然而,它返回 [4, 4, 4, 4, 4]。我怎样才能强迫 Python 做正确的事情?(这之前没有注意到吗?还是我只是厚?)

这是 Python 3.4.0(默认,2014 年 3 月 25 日,11:07:05)

谢谢,大卫

Joh*_*024 4

如何强制 Python 做正确的事情?

这是一种方法:

fun_list = []
for i in range(5):
    def fun(e, _ndx=i):
        return e[_ndx]
    fun_list.append(fun)

mylist = range(10)
print([f(mylist) for f in fun_list])
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为当执行for 语句_ndx时,会计算并保存for 的默认值。(在Python中,执行语句。)deffundef