我在这里不知所措。我正在尝试在 for 循环内定义一个函数。该函数使用循环内定义的变量,看起来类似:
myFuns = []
for i in range(10):
j = i + 4
def fun(): print(j)
myFuns += [fun]
Run Code Online (Sandbox Code Playgroud)
在此循环结束时,myFuns 中的函数有所不同,但它们执行相同的操作,显然,这不是传递给 fun() 的新变量 j,而是 j 的引用。
我很高兴知道如何传递 j 的值而不仅仅是引用。
我不知道在循环中创建的变量可能比循环寿命更长,所以这对我来说是一个新领域......
jfun是一个自由变量,调用时会查找其值;fun不会将 的当前值烘焙j到其定义中。此外,由于缺少任何其他包含范围,对的调用将在全局范围中fun引用,其中其最后设置的值是其在循环的最后一次迭代中的值。j
要在定义时实际存储jin的固定值,您需要将其作为具有默认值的参数传递:fun
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
Run Code Online (Sandbox Code Playgroud)
然而,闭包可能更合适:
# 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)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4362 次 |
| 最近记录: |