我在这里不知所措。我正在尝试在 for 循环中定义一个函数。该函数使用一个在循环内定义的变量,看起来像这样:myFuns = []for i in range(10): j = i + 4 def fun(): print(j) myFuns += [fun]在这个循环结束时,我在 myFuns 中的函数是不同的,但它们做同样的事情,很明显,这不是传递给 fun() 的新变量 j,而是 j 的引用。我很高兴知道如何传递 j 的值而不仅仅是引用。我不知道在循环中创建的变量可能比循环寿命更长,所以这对我来说是新领域......
1 回答
不负相思意
TA贡献1777条经验 获得超10个赞
j是一个自由变量,它的值在fun被调用时被查找;fun不会将 的当前值烘焙j到其定义中。此外,由于缺少任何其他包含范围,对 的调用fun将j在全局范围内引用,其最后设置的值是它在循环的最后一次迭代中的值。
要j在fun定义时实际存储in的固定值,您需要将其作为具有默认值的参数传递:
myFuns = []
for i in range(10):
j = i + 4
def fun(j=j):
print(j)
myFuns.append(fun) # Don't use += [...] for a single item
但是,闭包可能更合适:
# Here, j is a free variable in _, but its value comes from the local
# variable j defined by make_fun, not the global scope.
def make_fun(j):
def _():
return j
return _
myFuns = [make_fun(i) for i in range(10)]
添加回答
举报
0/150
提交
取消