【发布时间】:2022-01-12 05:49:23
【问题描述】:
def func1():
nums = [1,3]
j = 1
def func2(k):
nums.append(k)
print(nums)
j = j + k
print(j)
func2(5)
func1()
我了解传递给外部函数 func1() 的所有参数都将可供其内部函数 func2() 使用。当涉及到外部函数内部定义的变量时,例如上面的nums 和j,我只能访问/修改列表而不是 int。我得到以下输出:
[1, 3, 5]
Traceback (most recent call last):
File "<input>", line 10, in <module>
File "<input>", line 9, in func1
File "<input>", line 7, in func2
UnboundLocalError: local variable 'j' referenced before assignment
我们可以看到参数被附加到输出中的nums,但是当它到达j = j + k 时会抛出一个错误。集合和字典也是如此,它们可以从内部函数访问。为什么我不能访问int,但我可以访问列表,即使它们定义在同一个范围内?
【问题讨论】:
-
问题是分配,而不是类型。
-
@user2357112supportsMonica 正确。不允许赋值,但变量仍然可以访问。
标签: python function scope nested