一、函式名的應用
函式名是乙個特殊的變數,函式名配合括號(函式名())可以執行函式。
1.函式名的記憶體位址。
deffunc():
print("呵呵"
(func)
結果:
2.函式名可以賦值給其他變數,該變數配合括號即可呼叫函式。
deffunc():
print("呵呵"
)a =func
a()
#相當於呼叫func()
3.可以作為list的元素,for迴圈呼叫。
deffunc1():
print("你好"
)def
func2():
print("我好"
)def
func3():
print("他好"
)lst =[func1,func2,func3]
for el in
lst:
el()
4.函式名可以作為函式的引數。
deffunc1():
print("
小黑人"
)
def func2(fn): #
func1作為func2的引數
fn()
func2(func1)
5.函式名可以作為函式的返回值。
deffunc_1():
print("
函式1"
)
deffunc_2():
print("
函式2"
)
return
func_2
fn = func_1() #
func1執行完畢後返回func2,賦值給fn。
fn() #
fn配合括號即可執行func2函式,這樣就可以在函式外面呼叫內部函式。
二、閉包
閉包就是內層函式,對外層函式(非全域性)變數的引用。(記憶體函式對外層函式區域性變數的訪問)
deffunc1():
name = "
小黑人"
deffunc2():
print(name) #
閉包,func2引用了func1中的變數。
func2()
func1()
結果:小黑人
可以使用_ _closure_ _監測函式是否為閉包,返回cell就是閉包,返回none就不是閉包。
deffunc1():
name = "
小黑人"
deffunc2():
print(name) #
閉包func2()
print(func2.__closure__
)func1()
結果:小黑人
(,)
注:print(func2.__closure__)一定要寫函式內部,即func1函式裡面,如果寫到外面會報錯。
閉包優點:
1.安全,別的使用者不可以更改。如定義乙個全域性變數,在函式中使用global即可修改這個全域性變數,不安全。
2.外層函式中的變數常駐記憶體,方便函式外部呼叫。同時可以避免函式多次呼叫時的載入時間,如爬蟲資訊量大時。
python notice10 內建函式2
一 lambda匿名函式 為解決一些簡單的需求而設計的一句話函式。lambda表示的是匿名函式,不需要def來宣告,一句話就可以宣告乙個函式。語法 函式名 lambda 引數 返回值 計算n的n次方 deffunc n return n n print func 3 lambda函式 f lambd...
python notice7 命名空間和函式巢狀
一 命名空間 在python直譯器開始執行之後,會在記憶體中開闢乙個空間,每當遇到乙個變數的時候,就會把變數名和值之間的關係記錄下來,但是當遇到函式定義的時候,直譯器先把函式名讀入到記憶體中,不管函式內部的變數和邏輯。當函式被呼叫和訪問時,直譯器才會根據函式內部宣告的變數來開闢變數的內部空間,隨著函...
複習8 函式
1.內聯函式 2.引數傳遞 2.1引數傳遞的求值順序是未定義的。如f i,i 的引數值是未定義的,結果也是不可知的。2.2引數傳遞一般為值傳遞,保證了實參的值不會修改,但存在效率問題。於是我們使用指標和引用做引數,但使用它們可能會修改實參。為了給呼叫者足夠的保證,我們使用const修飾它們表示不會改...