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

2024-09-26 04:55:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这里不知所措。 我试图在for循环中定义一个函数。该函数使用在循环中定义的变量,看起来可能类似于:

myFuns = []
for i in range(10):
    j = i + 4
    def fun(): print(j)
    myFuns += [fun]

在这个循环的末尾,myFuns中的函数是不同的,但是它们做的是相同的事情,因为显然,这不是传递给fun()的新变量j,而是j的引用

我很高兴知道如何传递j的值,而不仅仅是参考值

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


Tags: 函数infor定义defrange事情领域
1条回答
网友
1楼 · 发布于 2024-09-26 04:55:57

j是一个自由变量,当fun被称为时,它的值被查找fun不会将当前值j烘焙到其定义中。此外,缺少任何其他包含作用域,对fun的调用将引用全局作用域中的j,在全局作用域中,它的最后一个设置值是它在循环的最后一次迭代中的值

要在fun中实际存储j的固定值,需要将其作为带有默认值的参数传递:

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)]

相关问题 更多 >