使用局部变量的for循环中的函数定义

我在这里不知所措。我正在尝试在 for 循环中定义一个函数。该函数使用一个在循环内定义的变量,看起来像这样:


myFuns = []

for i in range(10):

    j = i + 4

    def fun(): print(j)

    myFuns += [fun]

在这个循环结束时,我在 myFuns 中的函数是不同的,但它们做同样的事情,很明显,这不是传递给 fun() 的新变量 j,而是 j 的引用。


我很高兴知道如何传递 j 的值而不仅仅是引用。


我不知道在循环中创建的变量可能比循环寿命更长,所以这对我来说是新领域......


交互式爱情
浏览 268回答 1
1回答

不负相思意

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)]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python