i?=?0
def?f():
????print?i
????i?=?0
f()
#報(bào)錯(cuò)!局部變量引用之前未定義函數(shù)f里面print i,首先會(huì)先在函數(shù)內(nèi)部查找是否有這個(gè)變量,而函數(shù)內(nèi)部是有變量i的,但是在打印語句的后面說白了意思就是i我這local域還沒綁定呢,你哪來的print?趕緊找上級(jí)! 所以按道理不應(yīng)該報(bào)錯(cuò)啊,而是應(yīng)該向上級(jí)尋找,LEGB不是應(yīng)該L沒有往E找,E沒有找G,最后找到B,如果B沒有則報(bào)錯(cuò)??
1 回答

小貓過河
TA貢獻(xiàn)26條經(jīng)驗(yàn) 獲得超15個(gè)贊
這題不是有人已經(jīng)給解答過一遍了嗎?f()函數(shù)下已經(jīng)有本地變量( i )了,只是它位于print的后面,所以在print時(shí),i變量沒有綁定,而不是不存在這個(gè)變量,如果存在這個(gè)變量,它就不會(huì)向上查找,因?yàn)槟阍趺粗?,不是用戶定義本地變量時(shí)疏忽了呢?
所以報(bào)錯(cuò)遠(yuǎn)比向外查找顯得聰明很多。
添加回答
舉報(bào)
0/150
提交
取消