12 函式物件和閉包函式

2021-10-25 21:22:18 字數 2026 閱讀 8421

# 1、可以被賦值

# func = 記憶體位址

deffunc()

:print

('from func'

)f = func

# 2、可以當成變數

deffunc()

:return

3def

foo(x)

:print

(x)foo(func)

# 記憶體位址

# 3、可以當成返回值

deffunc()

:return

3def

foo(x)

:return x

res = foo(func)

print

(res())

# func的記憶體位址

# 4、可以當作容器型別的乙個元素

l =[func,1

]dic =

# 用途很廣

dic =

1、函式的巢狀呼叫:在呼叫乙個函式過程中呼叫其他函式

def

max2

(x, y)

:if x > y:

return x

else

:return y

defmax4

(a, b, c, d)

:# 第一步: 比較a和b 得到res1

res1 = max2(a, b)

# 第二步: 比較res1和c 得到res2

res2 = max2(res1, c)

# 第三步: 比較res2和d 得到res3

res3 = max2(res2, d)

return res3

2、函式的巢狀定義:在函式內定義函式

# 不常用

deff1

(action=0)

:if action ==0:

deff2()

:print(1

)else action==1:

deff3()

:print

(2

# 永遠在定義的時候「包」好

# 閉函式

deff1()

:deff2(

):pass

# 閉包函式

deff1()

: x =

33deff2(

):print

(x) f2(

)x =

11f1(

)# 33 # 外部變數不影響內部的變數

deffoo()

: x =

22 f1(

)#

# 如何全域性拿到f2

deff1()

: x =

3333

deff2()

:print

(x)return f2

f = f1(

)

import requests

# 方案一: 普通傳參

defget

(url)

: res = requests.get(url)

print

(len

(res.text)

)get(

"")get(

"")# 閉包傳參

)# 都可以,但是如果普通傳參沒有辦法解決, 要知道還有一種解決方案,典型:裝飾器

函式物件和閉包

1.引用 func f1 print f1 f1 print func func func 2.當作容器類元素 lt f1,1,2,3 print lt 0 lt 0 print f1 f1 lt 0 3.當作函式引數 def f2 f2 f1 print f2 f1 f2 f1 f2 f1 f2 ...

函式物件 巢狀和閉包函式

精髓 可以把函式當成變數去用 func 記憶體位址 def func print from func f func 函式func賦值給變數f print f,func 列印f和func的記憶體位址,完全相同 f 相當於呼叫了函式func 輸出 func at 0x02f434a8 from func...

python函式物件和閉包函式

函式物件 函式物件指的是函式可以被當做 資料 來處理,具體可以分為四個方面的使用,我們如下 函式可以被引用 def add x,y return x y func add func 1,2 3 函式可以作為容器型別的元素 dic dic dic add 1,2 3 函式可以作為引數傳入另外乙個函式 ...