【发布时间】:2020-11-27 15:53:24
【问题描述】:
在这两段代码中,为什么第二段给出局部变量赋值错误?两个代码相似,只是函数参数不同,第二个可以读取全局变量,为什么第一个不能读取符号表的参数名称变化?
第一个:
def a(z):
z+=1
z=3
a(z)
第二个:
def a(z):
b += 1
b = 5
a(b)
【问题讨论】:
-
在第一个中,您只更新作为函数参数的局部变量
z。在第二个中没有这样的局部变量,所以你得到一个错误。他们都没有更新全局变量。 -
在第一个中,
z+=1递增传递给函数的 z 参数。模块级 z 变量不相关。在第二个中,您试图增加 b 变量,但是 b 变量尚未在函数中声明并且没有值。因此你会得到一个错误。 -
您需要了解变量/引用、范围和声明/定义等几个概念。
标签: python scope frame symbol-table