例如:
x
在代码1中不是免费的,因为它是一个 全局 变量。x``bar()
在代码2中不是免费的,因为它是一个 绑定 变量。x
在中是免费的foo()
。
Python的区别在于闭包。当前环境中未定义自由变量,即局部变量的集合, 也不
是全局变量!因此,必须在其他地方定义。这就是闭包的概念。在代码2中,
foo()关闭于中
x定义的
bar()。Python使用词法作用域。这意味着,解释器仅通过查看代码即可确定范围。
例如:
x在中被称为
foo(),因为
foo()被包围
bar(),并
x在中绑定
bar()。
全局范围由Python专门处理。可以将全局作用域视为最外部作用域,但是由于性能原因,我没有这样做。因此,不可能
x既 自由 又 全球化 。免税
生活不是那么简单。存在 自由的全局 变量。Python文档(执行模型)说:
全局语句的作用域与同一块中的名称绑定 *** 作相同。如果最接近的自由变量包围范围包含全局语句,则将自由变量视为全局语句。
>>> x = 42>>> def foo():... global x... def baz():... print(x)... print(locals())... baz()... >>> foo()42{}
我自己不知道 我们都在这里学习。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)