63 python global global-variables
在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()
但是你应该永远不会遇到两个具有相同名称的变量,并且需要在同一范围内使用它们的问题.
Ian*_*and 83
Python为程序员提供了大量用于内省运行环境的工具.globals()只是其中之一,它在调试会话中非常有用,可以查看全局范围实际包含的对象.
我敢肯定,它背后的基本原理与locals()用于查看函数中定义的变量,或dir用于查看模块的内容或对象的属性的原理相同.
来自C++背景,我可以理解这些东西似乎没必要.在静态链接的静态类型环境中,它们绝对是.在这种情况下,在编译时确切知道哪些变量是全局变量,对象将具有哪些成员,甚至是另一个编译单元导出的名称.
然而,在动态语言中,这些东西并不固定; 它们可以根据代码的导入方式,甚至在运行时进行更改.至少由于这个原因,在调试器中访问这类信息可能是非常宝贵的.
Ale*_*oka 38
当您需要使用函数的字符串名称调用函数时,它也很有用.例如:
def foo():
    pass
function_name_as_string = 'foo'
globals()[function_name_as_string]() # foo(). 
你可以传递的结果globals(),并locals()到eval,execfile和__import__命令.这样做会为这些命令创建受限制的环境.
因此,存在这些函数以支持其他功能,这些功能受益于被赋予可能与当前上下文不同的环境.例如,您可以globals()在调用其中一个函数之前调用然后删除或添加一些变量.
globals()是有用的eval()- 如果你想评估一些引用范围内变量的代码,那些变量将是全局变量或本地变量.
为了扩展一点,eval()内置函数将解释给它的一串Python代码.签名是:eval(codeString, globals, locals),你会像这样使用它:
def foo():
    x = 2
    y = eval("x + 1", globals(), locals())
    print("y=" + y) # should be 3
这是有效的,因为解释器x从locals()变量的字典中获取值.您当然可以将自己的变量字典提供给eval.
| 归档时间: | 
 | 
| 查看次数: | 84395 次 | 
| 最近记录: |