首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中使用globals()的原因?

在Python中使用globals()的原因?
EN

Stack Overflow用户
提问于 2012-10-02 23:39:46
回答 7查看 90.9K关注 0票数 70

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

代码语言:javascript
复制
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()

我真的看不出这有什么意义?我唯一需要它的时候,就是我有局部变量和全局变量,它们的名字是一样的

代码语言:javascript
复制
def F():
    global x
    x = 1

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

F()
G()

但是,您永远不会遇到具有相同名称的两个变量的问题,并且需要在相同的作用域中使用它们。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-10-03 00:07:16

Python为程序员提供了大量用于内省运行环境的工具。globals()只是其中之一,在调试会话中查看全局作用域实际包含的对象可能非常有用。

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

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

然而,在动态语言中,这些都不是固定的;它们可能会根据代码导入的方式而变化,甚至在运行时也会发生变化。至少出于这个原因,可以在调试器中访问这类信息是非常有价值的。

票数 90
EN

Stack Overflow用户

发布于 2013-09-24 01:46:35

当您需要使用函数的字符串名调用函数时,它也很有用。例如:

代码语言:javascript
复制
def foo():
    pass

function_name_as_string = 'foo'

globals()[function_name_as_string]() # foo(). 
票数 40
EN

Stack Overflow用户

发布于 2012-10-03 00:11:58

您可以将globals()locals()的结果传递给evalexecfile__import__命令。这样做会为这些命令创建一个受限制的工作环境。

因此,这些功能的存在是为了支持其他功能,这些功能受益于被赋予可能不同于当前上下文的环境。例如,您可以调用globals(),然后在调用其中一个函数之前删除或添加一些变量。

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

https://stackoverflow.com/questions/12693606

复制
相关文章

相似问题

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