在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ 關(guān)于python3.6 官方文檔scope and namespaces的示例中

關(guān)于python3.6 官方文檔scope and namespaces的示例中遇到的問題?

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) # test spam
    do_nonlocal()
    print("After nonlocal assignment:", spam) # nonlocal spam
    do_global()
    print("After global assignment:", spam) # nonlocal spam

scope_test()
print("In global scope:", spam)
  1. 為什么執(zhí)行do_local()打印的是test spam而不是local spam
  2. 執(zhí)行do_global()時(shí),由于該函數(shù)中重新將spam這個(gè)變量聲明為全局變量,如果是這樣的話為什么打印的是nonlocal spam而不是test spam.
回答
編輯回答
艷骨

首先,print("After local assignment:", spam) 每次都是先尋找當(dāng)前作用域的 spam,也就是:

def scope_test():
    ...
    spam = "test spam"  # 給這個(gè) spam 取個(gè)代號:spam_4
    ...
    print("After local assignment:", spam) # 始終打印上面這個(gè) spam_4 的值
    print("After nonlocal assignment:", spam) # 始終打印上面這個(gè) spam_4 的值
    print("After global assignment:", spam) # 始終打印上面這個(gè) spam_4 的值

回答第一個(gè)問題:
do_local() 內(nèi)部的 spam 作用域僅僅為這個(gè) do_local()內(nèi)部,因此沒有給 spam_4 賦值,所以打印 test_spam。
回答第二個(gè)問題:
在執(zhí)行do_nonlocal()里面,spam_4 已經(jīng)賦值為 nonlocal spam。
do_global()里面的賦值沒有改變 spam_4 的值,因此還是打印 nonlocal spam。

2018年8月12日 13:27