站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        全局變量報錯:UnboundLocalError: local variable ‘l’ referenced before assignment


        總結(jié):

        • 內(nèi)部函數(shù),不修改全局變量可以訪問全局變量
        • 內(nèi)部函數(shù),修改同名全局變量,則python會認(rèn)為它是一個局部變量
        • 在內(nèi)部函數(shù)修改同名全局變量之前調(diào)用變量名稱(如print sum),則引發(fā)Unbound-LocalError

        在程序中設(shè)置的 sum 屬于全局變量,而在函數(shù)中沒有 sum 的定義,根據(jù)python訪問局部變量和全局變量的規(guī)則:當(dāng)搜索一個變量的時候,python先從局部作用域開始搜索,如果在局部作用域沒有找到那個變量,那樣python就在全局變量中找這個變量,如果找不到拋出異常(NAMEERROR或者Unbound-LocalError,這取決于python版本。)

        如果內(nèi)部函數(shù)有引用外部函數(shù)的同名變量或者全局變量,并且對這個變量有修改.那么python會認(rèn)為它是一個局部變量,又因為函數(shù)中沒有sum的定義和賦值,所以報錯。

        從下面兩個程序看單獨的訪問或者修改全局變量,并不報錯~

        訪問全局變量:

          #!/usr/bin/python  # -*- coding: UTF-8 -*-    import sys    sum=5  def add(a=1,b=3):      print a,b      print sum   #僅僅訪問   add(4,8)  print sum

        輸出結(jié)果為:

        4 8  5  5

        修改同名的全局變量,則認(rèn)為是一個局部變量:

          #!/usr/bin/python  # -*- coding: UTF-8 -*-    import sys  sum=5  def add(a=1,b=3):      print a,b       #內(nèi)部函數(shù)有引用外部函數(shù)的同名變量或者全局變量,并且對這個變量有修改.那么python會認(rèn)為它是一個局部變量      sum=b+a #在函數(shù)內(nèi)部修改      print sum  add(4,8)

        輸出結(jié)果為:

        4 8  12

        下面的程序就會因為”如果內(nèi)部函數(shù)有引用外部函數(shù)的同名變量或者全局變量,并且對這個變量有修改。那么 python 會認(rèn)為它是一個局部變量,又因為函數(shù)中沒有 sum 的定義和賦值,所以報錯:

        #!/usr/bin/python  # -*- coding: UTF-8 -*-    import sys  sum=5  def add(a=1,b=3):      print a,b      print sum  #內(nèi)部函數(shù)引用同名變量,并且修改這個變量。python會認(rèn)為它是局部變量。因為在此處print之前,沒有定義sum變量,所以會報錯(建議與情況一比較,備注:此處只是比上例先print sum)      sum=b+a      print sum  add(4,8)  print sum

        報錯信息:

        4 8  Traceback (most recent call last):  ...  ...  ...  UnboundLocalError: local variable 'sum' referenced before assignment

        遇到在程序中訪問全局變量并且要修改全局變量的值的情況可以使用:global 關(guān)鍵字,在函數(shù)中聲明此變量是全局變量。

        #!/usr/bin/python  # -*- coding: UTF-8 -*-    import sys    sum=5  print '改變之前:sum=',sum  def add(a=1,b=3):      global sum      print 'add 函數(shù)中:sum=',sum      sum=b+a      print '函數(shù)中改變之后:sum= ',sum  add(4,8)  print '改變之后 sum=',sum

        輸出結(jié)果為:

        改變之前:sum= 5  add 函數(shù)中:sum= 5  函數(shù)中改變之后:sum=  12  改變之后 sum= 12

        原文地址:https://blog.csdn.net/my2010sam/article/details/17735159

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 久久er国产精品免费观看2| 久久亚洲国产午夜精品理论片| 久久久精品国产sm调教网站 | 国产精品国产三级在线专区| 精品无码久久久久久午夜| 男女男精品网站免费观看| 国产A级毛片久久久精品毛片| 国产精品亚洲精品日韩已满| 亚洲国产精品久久电影欧美| 精品一区二区三区四区在线| 亚洲欧美日韩精品久久| 99热门精品一区二区三区无码| 中文字幕无码精品亚洲资源网久久 | 亚洲线精品一区二区三区| 精品国产亚洲男女在线线电影| 2024国产精品极品色在线| 国产精品1024香蕉在线观看| 国语自产少妇精品视频蜜桃| 少妇人妻偷人精品无码视频新浪| 亚洲国产精品无码久久久久久曰 | 国产亚洲精品拍拍拍拍拍| 99久久精品免费| 中文字幕精品一区影音先锋| 国产亚洲精品观看91在线| 国产精品青草久久久久婷婷| CAOPORM国产精品视频免费| 久久精品人人做人人爽97| 亚洲AV日韩精品久久久久久| 中文字幕精品一区二区精品| 亚洲欧美精品一区久久中文字幕| 日本精品自产拍在线观看中文 | 91精品国产91久久综合| 99久久99这里只有免费费精品| 国产精品无码专区| 国产精品视频一区二区三区四| 国产精品亚洲片在线观看不卡| 国产精品成人A区在线观看| 国产成人vr精品a视频| 99久久精品国产麻豆| 久久99国产精品久久99| 亚洲精品欧美综合|