这是Python文档的节选,我很难理解:
A scope is a textual region of a Python program where a namespace is directly accessible. “Directly accessible” here means that an unqualified reference to a name attempts to find the name in the namespace.
Although scopes are determined statically, they are used dynamically.
我不太明白作者从这个定义中所说的作用域是什么意思,什么是程序的文本区域,以及范围是静态确定和动态使用的意味着什么。我对范围有一个直观的理解,但是我很想完全理解docs的定义。如果有人能详细说明作者的想法,我们将不胜感激。在
“静态定义”
有全局作用域和局部作用域(我们忽略第三个)。在
在某个函数中,变量是全局变量还是局部变量,在调用函数之前就确定了,即静态地。在
例如:
静态地确定
func1
有一个局部变量,其名称是c
。静态地说,因为它是在函数被创建时完成的,而不是在实际访问某个局部变量之后。在那会有什么后果?例如,这个函数失败了:
^{pr2}$如果作用域在Python中是动态的,}将不被使用。Local
func2
将打印1。相反,与print a
一致的是,a
是一个局部变量,因此全局{a
也不会使用,因为它还没有初始化。在“动态使用”
从same document:
全局变量存储在字典中。当访问全局变量
a
时,解释器在该字典中查找键a
。这就是动态用法。在局部变量不是这样使用的。解释器预先知道一个函数有多少个变量,所以它可以给每个变量一个固定的位置。然后,访问局部变量
xy
可以通过简单地将“第二个局部变量”或“第五个局部变量”优化,而不实际使用变量名。在相关问题 更多 >
编程相关推荐