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)
谢谢,大卫
如何强制 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