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

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

Python變量范圍錯(cuò)誤

Python變量范圍錯(cuò)誤

Python變量范圍錯(cuò)誤以下代碼在Python 2.5和3.0中按預(yù)期工作:a, b, c = (1, 2, 3)print(a, b, c)def test():     print(a)     print(b)     print(c)    # (A)     #c+=1       # (B)test()但是,當(dāng)我取消注釋行(B)時(shí),我得到了UnboundLocalError: 'c' not assigned一行(A)。的值a和b被正確地打印。這讓我感到困惑,原因有兩個(gè):為什么在行(A)處拋出運(yùn)行時(shí)錯(cuò)誤,因?yàn)楹竺娴男校˙)語(yǔ)句?為什么變量a和b打印符合預(yù)期,同時(shí)c引發(fā)錯(cuò)誤?我能想到的唯一解釋是,賦值創(chuàng)建了一個(gè)局部變量,即使在創(chuàng)建局部變量之前,它也優(yōu)先于“全局”變量。當(dāng)然,變量在存在之前“竊取”范圍是沒(méi)有意義的。cc+=1c有人可以解釋一下這種行為嗎?
查看完整描述

3 回答

?
jeck貓

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

看一下反匯編可能會(huì)澄清發(fā)生了什么:


>>> def f():

...    print a

...    print b

...    a = 1


>>> import dis

>>> dis.dis(f)


  2           0 LOAD_FAST                0 (a)

              3 PRINT_ITEM

              4 PRINT_NEWLINE


  3           5 LOAD_GLOBAL              0 (b)

              8 PRINT_ITEM

              9 PRINT_NEWLINE


  4          10 LOAD_CONST               1 (1)

             13 STORE_FAST               0 (a)

             16 LOAD_CONST               0 (None)

             19 RETURN_VALUE

如您所見,用于訪問(wèn)a的字節(jié)碼是LOAD_FAST和b LOAD_GLOBAL。這是因?yàn)榫幾g器已經(jīng)識(shí)別出在函數(shù)內(nèi)分配了a,并將其歸類為局部變量。本地化的訪問(wèn)機(jī)制對(duì)于全局變量是根本不同的 - 它們?cè)趲淖兞勘碇徐o態(tài)分配了一個(gè)偏移量,這意味著查找是一個(gè)快速索引,而不是像全局變量那樣更昂貴的dict查找。正因?yàn)槿绱耍琍ython正在讀取該print a行“獲取局部變量的值'a'保存在插槽0中并打印它”,當(dāng)它檢測(cè)到該變量仍然未初始化時(shí),引發(fā)異常。


查看完整回答
反對(duì) 回復(fù) 2019-05-27
  • 3 回答
  • 0 關(guān)注
  • 832 瀏覽
慕課專欄
更多

添加回答

舉報(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)