在Python中引用与本地变量同名的全局变量

5

我是Python的新手,如果全局变量与本地变量同名,我们该如何引用全局变量。

spam = 'global spam'
def scope_test():
    spam = 'local spam'
    print(spam)
    # access global spam and print or assign to the local spam
    # print(global.spam)
    # local.spam = global.spam (something like this)

scope_test()

你不能这样做,也没有意义。你应该避免使用全局状态和名称遮蔽。 - jonrsharpe
5
你可以使用 print(globals()["spam"]),但最好不要这么做。 - Padraic Cunningham
或者是 import sys; print(sys.modules[__name__].spam),但这仍不是一个好主意。 - Moses Koledoye
@PM2Ring 我会自动添加 spam = (和 return spam)。 - furas
感谢大家分享见解,我知道如果在全局和本地范围内使用相同的名称会更加混乱。由于我已经在Java和JavaScript中进行了一些编程,因此我习惯于将我正在学习的Python概念与它们进行交叉应用。虽然我并没有在Java或JavaScript中这样做过,但在那里也是可能的。 - Muqsith
显示剩余2条评论
1个回答

6

这不是一个推荐的做法,但如果你好奇想要问/做这件事情,我来回答:

Python 3.5.2 
>>> spam = 'global spam'
>>> def scope_test(): 
..     spam = 'local spam' 
..     print(spam) 
..     # access global spam and print or assign to the local spam 
..     print(globals()['spam']) 
..     spam = globals()['spam'] 
..     print(spam) 
..     
>>> scope_test()

输出结果:
local spam
global spam
global spam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接