gpt4 book ai didi

python - 作用域静态确定动态使用是什么意思?

转载 作者:太空狗 更新时间:2023-10-29 18:31:16 26 4
gpt4 key购买 nike

这是我难以理解的类的 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.

我从这个定义中不太理解作者所说的作用域是什么意思,什么是程序的文本区域,以及作用域是静态确定和动态使用的意思。我对范围有一个直观的理解,但很想完全理解文档定义。如果有人愿意详细说明作者的想法,我们将不胜感激。

最佳答案

“静态定义”

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

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

例如:

a = 1
b = 2

def func1():
c = 3

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

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

这样做的后果是什么?嗯,例如,这个函数失败了:

a = 1

def func2():
print a # raises an exception
a = 2

如果作用域在 Python 中是动态的,func2 会打印 1。相反,根据 print a 已经知道 a是局部变量,所以不会使用全局的a。本地 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 可以通过简单地使用 “第二个局部变量”“第五个局部变量” 来优化,而无需实际使用变量名。

关于python - 作用域静态确定动态使用是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39801617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com