python學習第十天,名稱空間與作用域,函數的嵌套,global 和 nonlocal
阿新 • • 發佈:2018-08-26
需要 oba span pen global -- python 清空 臨時空間
名稱空間:
內置名稱空間: 在打開pytharm是加載
全局名稱空間: 在運行py文件是加載
局部名稱空間(臨時名稱空間) :在py文件中調用時加載
def func(): ----->函數定義
pass ------->函數體
func()------------->函數調用
函數定義時:內存中只儲存與函數名的對應關系,函數體的內容不儲存
函數調用時:才執行函數體的內容,創建臨時空間,隨著函數執行結束,內存中的臨時名稱空間裏面的內容也清空
作用域:
全局作用域:內置名稱空間裏的內容+全局名稱空間裏的內容
局部作用域:局部名稱空間
取值順序:
局部--->全局--->內置 ,單向取值,不可逆.
a=10 b=20 def test5(a,b): print(a,b) ---> 20,10 a=3 b=5 print(a,b) ---> 3,5 c = test5(b,a) print(c) ---------> None
加載順序:
內置名稱空間
全局名稱空間
局部名稱空間
函數的嵌套:
看到調用就執行
global 和 nonlocal(當數據類型是不可變的時候需要申明,但是當數據類型是列表的時候,可以直接用append往列表添加數據,同時直接引起全局變量的改變)
global:申明函數內的元素可以作為全局變量 (函數可以直接引用全局變量,沒有global不能改變全局變量)
nonlocal:申明子級函數可以改變父級函數的變量 ,但nonlocal不能改變全局變量(子級函數可以直接引用父級函數的變量,沒有nonlocal不能改變父級函數的變量)
count = 1 def func1(): count += 1 # 會報錯 # count = 2 不會報錯 print(count) func1()
def func1(): count = 666 def inner(): print(count) def func2(): nonlocal count # global count count += 1 print(‘func2‘,count) func2() print(‘inner‘,count) inner() print(‘func1‘,count) func1() print(count)
python學習第十天,名稱空間與作用域,函數的嵌套,global 和 nonlocal