第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

關(guān)于python作用域的問題

關(guān)于python作用域的問題

慕田峪7331174 2018-07-18 10:08:16
局部作用域里的代碼可以讀外部作用域(包括全局作用域)里的變量,我寫了兩段代碼如下:第一段:def b(): g=0 def a(): print(g) return a b()()可以正常顯示0,表示a()函數(shù)可以讀取外部的變量g。第二段:class a(): i=10 def fun(self): print(self.i)  #print(i)就會(huì)報(bào)錯(cuò)NameError: global name 'i' is not defined wa=a() wa.fun()這個(gè)fun()函數(shù)也能正確顯示10,表示可以讀取外部的變量,但是為什么在類中定義就必須要print(self.i)呢?為什么print(i)就會(huì)報(bào)錯(cuò)“NameError: global name 'i' is not defined”?
查看完整描述

4 回答

?
翻過高山走不出你

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊

Python里的name查找是滿足LEGB規(guī)則的(local =>enclosed=>global=>build-in),所以第一段代碼完全OK;

但第二段就涉及到class的命名空間問題了,learning python里是這么說的:

? Unqualified names (e.g., X) deal with scopes.
? Qualified attribute names (e.g., object.X) use object namespaces.

總之,如果直接print i的話,就會(huì)按照LEGB準(zhǔn)則來查找,而這里的i是在a的一個(gè)屬性,在fun的作用域中是找不到的,所以就出錯(cuò)啦~~~


查看完整回答
反對(duì) 回復(fù) 2018-07-19
?
MMMHUHU

TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個(gè)贊

python的語法是這樣的,引用對(duì)象的屬性一定要用self.i,直接i就是全局或函數(shù)的局部變量

查看完整回答
反對(duì) 回復(fù) 2018-07-19
?
收到一只叮咚

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊

第二個(gè)例子里, i是一個(gè)類變量

查看完整回答
反對(duì) 回復(fù) 2018-07-19
  • 4 回答
  • 0 關(guān)注
  • 308 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)