静态确定作用域并动态使用它意味着什么?

2024-07-05 14:26:42 发布

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

这是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的定义。如果有人能详细说明作者的想法,我们将不胜感激。在


Tags: ofthetoname文档定义is作者
1条回答
网友
1楼 · 发布于 2024-07-05 14:26:42

“静态定义”

有全局作用域和局部作用域(我们忽略第三个)。在

在某个函数中,变量是全局变量还是局部变量,在调用函数之前就确定了,即静态地。在

例如:

a = 1
b = 2

def func1():
    c = 3

print func1.__code__.co_varnames  # prints ('c',)

静态地确定func1有一个局部变量,其名称是c。静态地说,因为它是在函数被创建时完成的,而不是在实际访问某个局部变量之后。在

那会有什么后果?例如,这个函数失败了:

^{pr2}$

如果作用域在Python中是动态的,func2将打印1。相反,与print a一致的是,a是一个局部变量,因此全局{}将不被使用。Local a也不会使用,因为它还没有初始化。在

“动态使用”

same document

On the other hand, the actual search for names is done dynamically, at run time — however, the language definition is evolving towards static name resolution, at “compile” time, so don’t rely on dynamic name resolution! (In fact, local variables are already determined statically.)

全局变量存储在字典中。当访问全局变量a时,解释器在该字典中查找键a。这就是动态用法。在

局部变量不是这样使用的。解释器预先知道一个函数有多少个变量,所以它可以给每个变量一个固定的位置。然后,访问局部变量xy可以通过简单地将“第二个局部变量”“第五个局部变量”优化,而不实际使用变量名。在

相关问题 更多 >