色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

Python作用域與名字空間原理詳解

瀏覽:27日期:2022-08-01 16:26:17

Python具有靜態作用域,變量的作用域由它定義的位置決定,而與調用的位置無關。

a = 2 def f(): a = 2

第一行的a的作用域是全局作用域,作用于定義位置后面的所有位置。

第四行的a的作用域是局部作用域,作用于f函數里。

Python能夠形成局部作用域的只有函數與類,其他語句不形成局部作用域。

函數與類的局部作用域

def f(): a = 1class A: b = 2if 1 == 1: c = 3for _ in range(1): d = 4while True: e = 5 breakprint(c, d, e)try: print(a)except Exception as e: print(e)try: print(b)except Exception as e: print(e)

輸出結果

3 4 5 name ’a’ is not defined name ’b’ is not defined

python動態運行時,每個作用域都有三個名字空間:由局部變量組成的local名字空間,由全局變量組成的global名字空間,以及python內建模塊的builtins名字空間,在查詢一個變量時,搜索順序為local->global->builtins,即局部變量屏蔽全局變量,全局變量屏蔽內建變量。

python的global名字空間是動態的,即每遇到一個賦值語句(def與class也屬于賦值語句),global名字空間都可能發生變化。

global名字空間的動態變化

print(dir()) a = 1 print(dir()) b = 2 print(dir())

輸出結果

1 [’__annotations__’, ’__builtins__’, ’__cached__’, ’__doc__’, ’__file__’, ’__loader__’, ’__name__’, ’__package__’, ’__spec__’]2 [’__annotations__’, ’__builtins__’, ’__cached__’, ’__doc__’, ’__file__’, ’__loader__’, ’__name__’, ’__package__’, ’__spec__’, ’a’]3 [’__annotations__’, ’__builtins__’, ’__cached__’, ’__doc__’, ’__file__’, ’__loader__’, ’__name__’, ’__package__’, ’__spec__’, ’a’, ’b’]

從輸出結果可以看出,global名字空間是動態增加的。

這意味著,雖然位于global名字空間的變量叫做全局變量,它的作用范圍也不是全局位置,它只作用于第一次賦值之后的位置。因為只有在變量賦值初始化的時候,它才會被加入到global名字空間中。

函數和類搜索的global名字空間是調用位置的global名字空間,與定義位置無關

def f(): print(a)try: f()except Exception as e: print(e)a = 2f()

輸出結果

name ’a’ is not defined2

函數f打印全局變量a,a在第9行定義。在第五行調用f的時候,a不在global名字空間中,所以會輸出錯誤信息,在第十行再次調用函數f時,a已經加入了global名字空間,所以能夠打印出a。

python為了提高效率,local名字空間是靜態實現的,因為對于一個函數來說,它所包含的局部變量是明確已知的。

函數的local名字空間是靜態的

a = 4def f(): try: print(a) except Exception as e: print(e) a = 1f()

輸出結果

local variable ’a’ referenced before assignment

在打印a的時候,在local名字空間中找到了a,但是這時候a并沒有賦值初始化,所以拋出異常。這也說明了local名字空間與global名字空間不同,它會在一開始就把所有的局部變量加入到名字空間中。

總結:

1. python是靜態作用域,變量初始化的位置決定了它的作用域,而與變量調用的位置無關

2. global名字空間是動態的,不同位置的global名字空間不同,local名字空間是靜態的,局部變量在整個局部作用域內可見。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 亚洲精品国自产拍影院 | 亚洲精品社区 | 欧美一区二区在线观看视频 | 成在线人视频免费视频 | 国产在线精品一区二区不卡 | 欧美一区二区三区免费 | 精品国产v无码大片在线观看 | 女人张开腿给人桶免费视频 | 国产欧美自拍 | 久久国内精品视频 | 亚洲精品天堂自在久久77 | 国产日韩一区二区三区在线观看 | 久久高清一级毛片 | 久久a热6| 1024国产欧美日韩精品 | 久久久网站| 成年女人免费看 | 一级特色黄大片 | 亚洲欧美日韩中文字幕在线一 | 久久毛片久久毛 | 精品久久久久久国产91 | 国产精品久久久久久久毛片 | 在线观看日本亚洲一区 | 特黄特色三级在线播放 | 欧美日本韩国一区二区 | 最新国产三级 | 亚洲国产精品a一区二区三区 | 亚洲欧美日韩在线不卡中文 | 久久久精品成人免费看 | 国产观看在线 | 国产色手机在线观看播放 | 韩国美女毛片 | 日韩欧美综合在线二区三区 | 亚洲综合一区二区精品久久 | 国产高清在线精品 | 色欲麻豆国产福利精品 | 91视频站| 久久免费视频在线观看30 | 国产美女视频一区 | 国产欧美日韩综合精品一区二区 | 美女视频网站永久免费观看软件 |