【发布时间】:2017-09-21 05:57:45
【问题描述】:
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)
您好,我正在处理 python 类,并面临官方文档中的上述示例。
输出:
本地分配后:测试垃圾邮件
非本地分配后:非本地垃圾邮件
全局分配后:非本地垃圾邮件
在全球范围内:全球垃圾邮件
do_local 之后的第一次打印结果仍然打印“测试垃圾邮件”,但无法弄清楚为什么第二次打印结果为“非本地垃圾邮件”。
有什么区别?
我的推断是,如果我 do_local() 则它运行 do_local() 并将垃圾邮件变量更改为“本地垃圾邮件”,并且它可能必须与导致“非本地垃圾邮件”的 do_nonlocal() 相同。但事实并非如此。
为什么?
【问题讨论】:
-
嗯,第二种情况是
nonlocal? -
@DavisHerring 是的
标签: python