Python巢狀函式,作用域與偏函式用法例項分析
阿新 • • 發佈:2020-01-09
本文例項講述了Python巢狀函式,作用域與偏函式用法。分享給大家供大家參考,具體如下:
內嵌函式(巢狀函式):
- 意思:在函式裡面再定義一個新的函式
- 如果在函式體內不呼叫內嵌的函式,那麼無法在外部呼叫
def my_pr1(): print("第一層列印") def my_pr2(): print("第二層列印") my_pr2()#如果在函式體內不呼叫內嵌的函式,那麼無法在外部呼叫 my_pr1()
作用域:
local(區域性作用域) -->enclosing(函式範圍作用域)-->global(全域性作用域)--->build-in(內建物件作用域)
程式碼塊級別的作用域: Python沒有劃分程式碼塊作用域
- 程式碼塊裡的變數,外部可以呼叫
if 1>0: name="automan" print(name)
上述程式碼執行結果:
automan
函式基本的作用域:
- 區域性作用域:
- 函式內部定義的變數是區域性變數,外部無法訪問
a=50 def change(x): x=6 change(a) print("after change:",a)
上述程式碼執行結果:
after change: 50
def func3(): superman="automan" print(superman)
執行結果:
NameError: name 'superman' is not defined
- 內嵌關係的函式的作用域:
- 對於內嵌關係的函式的作用域依然遵循local(區域性作用域) -->enclosing(函式範圍作用域)-->global(全域性作用域)--->build-in(內建物件作用域)
- 如果自身函式有目標變數,則使用自身函式內的變數的值;
- 如果沒有,會向上找父函式中是否存在目標變數,如果有,則使用父函式中的該變數的值;【如果父函式還有父函式,也會一直向上查詢】
- 直到離開最外層的函式體,那麼會在全域性範圍內找該變數
- 如果再沒有,會到內建物件作用域找
- 都沒有就報錯,丟擲異常
def func4(): superman="automan" def haha(): print(superman) haha() func4()
執行結果:
automan
- 非內嵌關係的函式的作用域:
- 非內嵌關係的函式作用域依然遵循local(區域性作用域) -->enclosing(函式範圍作用域)-->global(全域性作用域)--->build-in(內建物件作用域)
- 但由於不是父子關係的巢狀函式,當自身函式範圍區域內找不到時,會直接到全域性作用域找
aotuman='金甲戰士' def f5(): print(aotuman) def f4(): aotuman='max' f5() f4()
執行結果:
金甲戰士
偏函式:
- 預設填寫某個函式的某些引數,返回一個新的函式
- 避免了引數的重複輸入
import functools print_t=functools.partial(print,end='\t') print_t(1) print_t(1) print_t(1)
上述程式碼結果:
1 1 1
關於Python相關內容感興趣的讀者可檢視本站專題:《Python函式使用技巧總結》、《Python面向物件程式設計入門與進階教程》、《Python資料結構與演算法教程》、《Python字串操作技巧彙總》、《Python編碼操作技巧總結》及《Python入門與進階經典教程》
希望本文所述對大家Python程式設計有所幫助。