在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()
但是,您永远不会遇到具有相同名称的两个变量的问题,并且需要在相同的作用域中使用它们。
发布于 2012-10-03 00:07:16
Python为程序员提供了大量用于内省运行环境的工具。globals()
只是其中之一,在调试会话中查看全局作用域实际包含的对象可能非常有用。
我确信,它背后的基本原理与使用locals()
查看函数中定义的变量,或使用dir
查看模块的内容或对象的属性相同。
来自C++的背景,我可以理解这些事情似乎是不必要的。在静态链接、静态类型的环境中,它们绝对是。在这种情况下,在编译时确切地知道哪些变量是全局的,一个对象将具有哪些成员,甚至知道另一个编译单元导出了哪些名称。
然而,在动态语言中,这些都不是固定的;它们可能会根据代码导入的方式而变化,甚至在运行时也会发生变化。至少出于这个原因,可以在调试器中访问这类信息是非常有价值的。
发布于 2013-09-24 01:46:35
当您需要使用函数的字符串名调用函数时,它也很有用。例如:
def foo():
pass
function_name_as_string = 'foo'
globals()[function_name_as_string]() # foo().
发布于 2012-10-03 00:11:58
您可以将globals()
和locals()
的结果传递给eval
、execfile
和__import__
命令。这样做会为这些命令创建一个受限制的工作环境。
因此,这些功能的存在是为了支持其他功能,这些功能受益于被赋予可能不同于当前上下文的环境。例如,您可以调用globals()
,然后在调用其中一个函数之前删除或添加一些变量。
https://stackoverflow.com/questions/12693606
复制相似问题