代碼塊
駿馬金龍https://www.cnblogs.com/f-ck-need-u/p/9925021.html
https://www.cnblogs.com/jin-xin/articles/9439483.html
代碼塊可以使得一段python代碼作為一個單元、一個整體執行。
幾種代碼塊
- 模塊文件是一個代碼塊
- 函數體是一個代碼塊
- class的定義是一個代碼塊
- 交互式(python idle)的每一個命令行都是一個獨立的代碼塊
- 腳本文件是一個代碼塊
- 腳本命令是一個代碼塊(python -c "xxx")
- eval()和exec()中的內容也都有各自的代碼塊
代碼塊的作用是組織代碼,同時意味着退出代碼區塊范圍就退出了作用域范圍。例如退出函數區塊,就退出了函數的作用域,使得函數內的本地變量無法被函數的外界訪問。
代碼塊緩存機制
緩存機制的前提條件:在一個代碼塊
緩存機制內容:Python在執行初始化對象的時候,回檢查之前有沒有初始化過這個變量,如果有就指向這個內存。
適用對象:int,str,float,bool
交互式代碼塊
注意:小整數可以跨域,因為它在python啟動的時候就在內存中存入了常用的小整數(-5到256)
交互式是一行為一個代碼塊,所以當它執行一句代碼就不知道上面執行了啥
可以理解,1班來了一個人,2班並不知道
x = 1000
y = 1000
x is y
False
1.x=1000,在內存中開辟一個內存存1000,x指向他
2.y=1000,這時候不知道之前代碼運行了啥,於是自顧自的創建了一個內存,存1000,y指向他
3.由於x和y不是指向同一個內存,就是False
x=1000;y=1000
x is y
1.python首先讀取這一行,發現x,y的值都是1000,於是進行了簡單的優化x,y=1000
2.x,y指向同一個內存,所以為True
True
腳本py文件代碼塊
整個py文件是一個代碼塊,但是它的內部還是可以嵌套其他的代碼塊的如(函數,exec()等)
x=1000
y=1000
print(x is y)
def zx():
c=1000
v=1000
print(c is y)
print(c is v)
zx()
True
False
True
由此可見代碼嵌套代碼塊也是不能相互影響的,函數的代碼塊,並不知道外部發生了什么,這就可以解釋之前作用域的問題了
注意:
函數的聲明過程中,所有涉及到變量的作用域內都不會對i進行賦值,僅僅只是保存了這個i變量名,只有在調用函數的時候才會進行賦值操作。