我一直在关注 Python 文档中的教程,并且发现了有关使用 global
和 nonlocal
关键字的代码。我已经通读了代码,但我不太明白为什么有些代码会这样做。这是代码:
def scope_test():
def do_local():
spam = "local spam"
def do_nonlocal():
nonlocal spam
spam = "nonlocal spam"
def do_global():
global spam
spam = "global spam"
spam = "test spam"
do_local()
print("After local assignment:", spam)
do_nonlocal()
print("After nonlocal assignment:", spam)
do_global()
print("After global assignment:", spam)
scope_test()
print("In global scope:", spam)
打印输出:
After local assignment: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam
在 do_global()
调用之后,为什么 spam
会打印出 nonlocal spam
?它不应该打印出 global spam
吗?
谢谢!
最佳答案
do_global
调用分配一个global 变量(在所有函数之外的范围内定义的变量)。 scope_test
函数内的 print 函数仍然引用该函数本地范围内的 spam
。
因此,由于 global
关键字使值 "global spam"
分配给垃圾邮件的全局范围,因此更改不会应用于本地范围,并且仍然打印未更改的本地范围。
Python 检查这一点的具体机制是在最局部范围内搜索变量,最终在全局范围内结束。这就是为什么总是在同名的全局变量之前引用局部变量。
关于python - Python 中 global 关键字的作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31898055/