python - Python 中 globals() 的原因?

标签 python global-variables global

Python 中有 globals() 函数的原因是什么?它只返回全局变量的字典,这些变量已经是全局的,所以它们可以在任何地方使用……我只是出于好奇,试图学习 python。

def F():
    global x
    x = 1

def G():
    print(globals()["x"]) #will return value of global 'x', which is 1

def H():
    print(x) #will also return value of global 'x', which, also, is 1

F()
G()
H()

我真的看不出这里的重点?只有当我有本地和全局变量时,我才需要它,它们的名称相同

def F():
    global x
    x = 1

def G():
    x = 5
    print(x) #5
    print(globals()["x"]) #1

F()
G()

但是您永远不应该遇到两个变量同名的问题,并且需要在同一范围内使用它们。

最佳答案

Python 为程序员提供了大量用于自省(introspection)运行环境的工具。 globals() 只是其中之一,它在调试 session 中查看全局范围实际包含哪些对象非常有用。

我敢肯定,它背后的原理与使用 locals() 来查看函数中定义的变量,或者使用 dir 来查看函数中定义的变量的原理相同。查看模块的内容,或对象的属性。

来自 C++ 背景,我可以理解这些东西似乎没有必要。在静态链接、静态类型的环境中,它们绝对会。在这种情况下,在编译时就知道哪些变量是全局变量,一个对象将拥有哪些成员,甚至另一个编译单元导出了哪些名称。

然而,在动态语言中,这些东西不是固定不变的;它们可以根据代码的导入方式甚至在运行时进行更改。至少出于这个原因,在调试器中访问此类信息是非常宝贵的。

关于python - Python 中 globals() 的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12693606/

相关文章:

python - 使用 PyQt 闪烁小部件

python - Tkinter打开文件窗口,文件扩展名区分大小写

javascript - REACT- 将需要经常更新的数据存储为全局变量而不是使用 setState() - 不推荐?

PHP $全局 |安全查询

python - 如何为 PyQt 项目组织 GUI 代码?

python - 在numpy中绘制随机元素

c++ - 如何从 C++ 过滤掉 Lua 中用户定义的全局变量?

python - if/else 内的全局范围用于运行中位数

python - python中带有setdefault的全局变量

ruby - 全局符号上下文中的类与实例方法