【问题标题】:Effects of the global keyword in PythonPython 中 global 关键字的作用
【发布时间】:2015-08-08 20:06:31
【问题描述】:

我一直在关注 Python 文档中的教程,并且遇到了有关使用 globalnonlocal 关键字的代码。我已经通读了代码,但我不太明白为什么某些代码会执行它的功能。代码如下:

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吗?

谢谢!

【问题讨论】:

标签: python


【解决方案1】:

do_global 调用分配了一个全局 变量(定义在所有函数之外的范围内)。 scope_test 函数内部的 print 函数仍然引用该函数本地范围内的 spam

因此,由于global关键字使值"global spam"分配给垃圾邮件的全局范围,因此更改不会应用到本地范围,仍然会打印未更改的本地范围。

Python 对此进行检查的具体机制是在最局部范围内搜索变量,最后在全局范围内结束。这就是为什么在同名全局变量之前总是引用局部变量的原因。

【讨论】:

  • 基本上是层次结构的问题。全局变量处于最高级别,这意味着它将是最后检查的范围。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-14
  • 2011-09-30
  • 1970-01-01
  • 2011-01-21
  • 1970-01-01
  • 1970-01-01
  • 2016-07-10
相关资源
最近更新 更多