亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python變量作用域LEGB和變量名的查找規則

系統 1645 0

作用域LEGB

作用域:變量起作用的范圍。
LEGB含義解釋:
L — Local(function)局部作用域;函數內的命名空間 ,可以通過locals() 查看。
E —Enclosing function locals外部嵌套作用域;外部嵌套函數的命名空間(例如closure閉包函數)
G —Global(module)全局作用域;函數定義所在模塊(.py文件)內的命名空間,可以通過globals() 查看。
B —Builtin(Python)內置模塊作用域;Python內置模塊的命名空間(builtins.py文件) ,可以通過 dir( builtins ) 查看。

注意:for,while循環并不會產生一個新的命名空間。

變量名的查找規則

由內到外:L -> E -> G -> B
在訪問變量時,先查找本地變量,然后是包裹此函數外部的函數內部的變量,之后是全局變量,最后是內置變量。

局部變量
定義在函數內部的變量(形參也是局部變量)
只能在函數內部使用
調用函數時才被創建,函數結束后自動銷毀

全局變量
定義在函數外部,模塊內部的變量。
在整個模塊(py文件)范圍內訪問(但函數內直接能讀不能將其直接賦值,需要關鍵字global先聲明可以)。

global的使用

global 語句
作用:
– 在函數內部修改全局變量。
– 在函數內部定義全局變量(全局聲明)。
語法
global 變量1, 變量2, …
說明
– 在函數內直接為全局變量賦值,視為創建新的局部變量。
– 不能先聲明局部的變量,再用global聲明為全局變量。

案例分析:
1, 在函數內部可以直接引用外部變量(僅讀):

            
              a 
              
                =
              
              
                100
              
              
                def
              
              
                outer
              
              
                (
              
              
                )
              
              
                :
              
              
                print
              
              
                (
              
              a
              
                )
              
              
                if
              
               __name__ 
              
                ==
              
              
                "__main__"
              
              
                :
              
              
    outer
              
                (
              
              
                )
              
              
                # 100
              
            
          

2,在函數內試圖直接對一個全局變量賦值(直接寫),僅視為創建新的局部變量:

            
              a 
              
                =
              
              
                100
              
              
                def
              
              
                outer
              
              
                (
              
              
                )
              
              
                :
              
              
    a 
              
                =
              
              
                200
              
              
                print
              
              
                (
              
              a
              
                )
              
              
                # 200
              
              
                if
              
               __name__ 
              
                ==
              
              
                "__main__"
              
              
                :
              
              
    outer
              
                (
              
              
                )
              
              
                print
              
              
                (
              
              a
              
                )
              
              
                # 100
              
            
          

3,如果想要在函數內部引用全局變量,可以使用global關鍵字

            
              a 
              
                =
              
              
                100
              
              
                def
              
              
                outer
              
              
                (
              
              
                )
              
              
                :
              
              
                global
              
               a
    a 
              
                =
              
              
                200
              
              
                print
              
              
                (
              
              a
              
                )
              
              
                # 200
              
              
                if
              
               __name__ 
              
                ==
              
              
                "__main__"
              
              
                :
              
              
    outer
              
                (
              
              
                )
              
              
                print
              
              
                (
              
              a
              
                )
              
              
                # 200
              
            
          

4,在函數內部是可以用global定義新的全局變量的:

            
              
                def
              
              
                outer
              
              
                (
              
              
                )
              
              
                :
              
              
                global
              
               c
    c 
              
                =
              
              
                200
              
              
                print
              
              
                (
              
              c
              
                )
              
              
                # 200
              
              
                if
              
               __name__ 
              
                ==
              
              
                "__main__"
              
              
                :
              
              
    outer
              
                (
              
              
                )
              
              
                print
              
              
                (
              
              c
              
                )
              
              
                # 200 
              
            
          

5, 不能 先聲明局部的變量,后再用global聲明其為全局變量

            
              
                def
              
              
                outer
              
              
                (
              
              
                )
              
              
                :
              
              
    c 
              
                =
              
              
                100
              
              
                #不能在定義一個局部變量之后,后用global聲明它是全局變量
              
              
                global
              
               c
    c 
              
                =
              
              
                200
              
              
                print
              
              
                (
              
              c
              
                )
              
              
                # 200
              
              
                if
              
               __name__ 
              
                ==
              
              
                "__main__"
              
              
                :
              
              
    outer
              
                (
              
              
                )
              
              
                print
              
              
                (
              
              c
              
                )
              
              
                # 200
              
            
          

將會報錯:

            
              
                global
              
               c
    
              
                ^
              
              
SyntaxError
              
                :
              
               name 
              
                'c'
              
              
                is
              
               assigned to before 
              
                global
              
               declaration

            
          

nonlocal

作用:
在內層函數引用修改外層嵌套函數內的變量。(函數是可以嵌套的,如閉包)
語法
nonlocal 變量名1,變量名2, …
說明
在被嵌套的內函數中進行使用
不能先聲明局部的變量,后再用nonlocal 聲明其為外部嵌套變量
案例:
在函數內部

            
              
                def
              
              
                outer
              
              
                (
              
              
                )
              
              
                :
              
              
    c 
              
                =
              
              
                200
              
              
                def
              
              
                inner
              
              
                (
              
              
                )
              
              
                :
              
              
                nonlocal
              
               c
        
              
                print
              
              
                (
              
              c
              
                )
              
              
                # 200
              
              
                return
              
               inner



              
                if
              
               __name__ 
              
                ==
              
              
                "__main__"
              
              
                :
              
              
    outer
              
                (
              
              
                )
              
              
                (
              
              
                )
              
            
          

不能 先聲明局部的變量,后再用nonlocal 聲明其為外部嵌套變量

            
              
                def
              
              
                outer
              
              
                (
              
              
                )
              
              
                :
              
              
    c 
              
                =
              
              
                200
              
              
                def
              
              
                inner
              
              
                (
              
              
                )
              
              
                :
              
              
        c 
              
                =
              
              
                100
              
              
                #不能先聲明局部的變量,后再用nonlocal 聲明其為外部嵌套變量
              
              
                nonlocal
              
               c
        
              
                print
              
              
                (
              
              c
              
                )
              
              
                # 200
              
              
                return
              
               inner


              
                if
              
               __name__ 
              
                ==
              
              
                "__main__"
              
              
                :
              
              
    outer
              
                (
              
              
                )
              
              
                (
              
              
                )
              
            
          

將會報錯:

            
              
                nonlocal
              
               c
    
              
                ^
              
              
SyntaxError
              
                :
              
               name 
              
                'c'
              
              
                is
              
               assigned to before 
              
                nonlocal
              
               declaration

            
          

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 91国在线高清视频 | 一级毛片一级毛片a毛片欧美 | 久久视频在线 | 国产真实乱子伦精品视 | 色成年激情久久综合 | 国产成人亚洲精品一区二区在线看 | 我不卡老子影院午夜伦我不卡四虎 | 福利在线网站 | 免费看一级特黄a大片 | 日韩欧美伊人久久大香线蕉 | 日韩视频 中文字幕 | 99re热精品视频国产免费 | 精品一区二区三区18 | 成人免费观看视频久爱网 | 理论片 我不卡影院 | 一级a毛片免费 | 元龙第三季免费观看 | 特黄特色一级aa毛片免费观看 | 黑人边吃奶边扎下面激情视频 | 曰本女人一级毛片看一级毛 | 亚洲 国产 日韩 欧美 | 两性色午夜视频免费老司机 | 外国成人网在线观看免费视频 | 久久精品美女视频 | 色站综合| 91亚洲成人 | 九色福利 | 亚洲天堂一区在线 | 日韩欧美亚洲一区精选 | 福利视频中文在线观看 | 久久亚洲精品久久久久 | 国产亚洲精品美女久久久 | 国产臀控福利视频在线 | 欧美一级黄色毛片 | 亚洲第一区视频在线观看 | 999成人精品视频在线 | 嘿嘿嘿视频免费网站在线观看 | 最近中文2019视频在线 | 久久精品免观看国产成人 | 奇米影视777在线播放 | 99在线视频精品 |