首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -全局的优先级是什么?

Python -全局的优先级是什么?
EN

Stack Overflow用户
提问于 2015-12-09 08:31:12
回答 1查看 264关注 0票数 3

当涉及到使用其他包的包时,我对全局变量感到有点困惑。从快速的谷歌搜索;没有太多的解释。

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

代码语言:javascript
复制
<Package>
   |- __init__.py
   |- Module.py
   |- Module2.py

在Module.py中使用了一个global语句,它是仅针对该模块或整个包(包括Module2.py和/或__init__.py)或在interperter级别(针对在解释器中运行的任何内容)而全球化的变量。

另外,如果在__init__.py I from .Module import *中,包含全局语句的导入函数是否会“正确地全球化”该文件的任何上述变量?

EN

回答 1

Stack Overflow用户

发布于 2015-12-09 08:40:46

全局变量有多全局?

Python中的所谓“全局”变量实际上是模块级的。实际上存在全局全局变量,它们位于Python2中的__builtin__模块或Python3中的builtins模块中,但是您不应该接触它们。(另外,请注意s的存在或缺失。__builtins__有它自己的怪异之处。)

global 语句有什么作用?

global语句意味着,仅对于出现它的函数,指定的一个或多个变量名引用“全局”(模块级)变量,而不是局部变量。

import ***?**怎么样?

天啊,别这么做。全局变量已经够糟糕的了,但是导入它们更糟糕,用import *做这件事是你能做到的最糟糕的方法。对于新的程序员来说,导入系统对全局变量所做的事情是非常令人惊讶的,而且几乎不会是您想要的。

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

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

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

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34168734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档