Python global有什么优先权?

2024-09-29 09:39:19 发布

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

当涉及到使用其他包的包时,我对globals有点困惑。从谷歌的快速搜索,没有什么解释。你知道吗

简单地说:当使用global时,变量在什么级别是“全球化的”?它是在模块级、包级还是解释器级?例如,在这样的设置中:

<Package>
   |- __init__.py
   |- Module.py
   |- Module2.py

其中使用了global语句模块.py,是仅为该模块或整个包(包括Module2.py和或uuu init_uuuuuuuuu.py)或在interperter级别(对于在解释器中运行的任何内容)全局化的变量。你知道吗

另外,如果在uu init_uuy.py Ifrom .Module import *中,包含全局语句的导入函数会“正确地全球化”该文件的任何所述变量吗?你知道吗


Tags: 模块pypackageinit语句级别全局uuu
1条回答
网友
1楼 · 发布于 2024-09-29 09:39:19

全局变量的全局性如何?

Python中所谓的“全局”变量实际上是模块级的。实际上有全局globals,它们位于python2中的__builtin__模块或python3中的builtins模块中,但是您不应该碰它们。(另外,请注意是否存在s__builtins__是它自己的怪事。)

这个global语句做什么?

global语句意味着,对于它出现的函数,指定的变量名是指“全局”(模块级)变量,而不是局部变量。你知道吗

import *呢?

天哪,别那么做。Globals已经够糟糕的了,但是导入它们就更糟糕了,而使用import *来实现它几乎是最糟糕的方式。导入系统对全局变量所做的事情对新程序员来说是惊人的,而且几乎从来都不是你想要的。你知道吗

当您执行import *时,这并不意味着您的模块开始在导入的模块的全局变量中查找变量。这意味着Python查找导入的模块,找到它的“公共”全局变量*,并将它们的当前值赋给当前模块中同名的新全局变量。你知道吗

这意味着对新全局变量的任何赋值都不会影响原始变量,对原始变量的任何赋值也不会影响新变量。使用import *导入的任何函数仍在查看原始变量,因此它们不会看到您对副本所做的更改,也不会看到它们对副本所做的更改。结果是一团混乱。你知道吗

认真地说,如果您必须使用另一个模块的全局变量,请使用import othermodule语法导入它,并使用othermodule.whatever_global访问全局变量。你知道吗


*如果模块定义了一个__all__列表,“public”全局变量是其名称出现在该列表中的变量。否则,它们就是名称不以下划线开头的变量。def内联函数存储在普通变量中,因此这些函数与其他变量包含在相同的条件下。你知道吗

相关问题 更多 >