python notice8 函式名應用和閉包

2022-08-09 03:57:11 字數 1753 閱讀 5271

一、函式名的應用

函式名是乙個特殊的變數,函式名配合括號(函式名())可以執行函式。

1.函式名的記憶體位址。

def

func():

print("呵呵"

)print

(func)

結果:

2.函式名可以賦值給其他變數,該變數配合括號即可呼叫函式。

def

func():

print("呵呵"

)a =func

a()

#相當於呼叫func()

3.可以作為list的元素,for迴圈呼叫。

def

func1():

print("你好"

)def

func2():

print("我好"

)def

func3():

print("他好"

)lst =[func1,func2,func3]

for el in

lst:

el()

4.函式名可以作為函式的引數。

def

func1():

print("

小黑人"

)

def func2(fn): #

func1作為func2的引數

fn()

func2(func1)

5.函式名可以作為函式的返回值。

def

func_1():

print("

函式1"

)

deffunc_2():

print("

函式2"

)

return

func_2

fn = func_1() #

func1執行完畢後返回func2,賦值給fn。

fn() #

fn配合括號即可執行func2函式,這樣就可以在函式外面呼叫內部函式。

二、閉包

閉包就是內層函式,對外層函式(非全域性)變數的引用。(記憶體函式對外層函式區域性變數的訪問)

def

func1():

name = "

小黑人"

deffunc2():

print(name) #

閉包,func2引用了func1中的變數。

func2()

func1()

結果:小黑人

可以使用_ _closure_ _監測函式是否為閉包,返回cell就是閉包,返回none就不是閉包。

def

func1():

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修飾它們表示不會改...