秒懂 python 閉包和裝飾器

2021-10-05 07:14:49 字數 1671 閱讀 4448

定義:函式內的屬性,都是有生命週期的都在函式執行期間存活。

內部函式對外部函式作用域裡的變數的引用

閉包內的閉包函式私有化了變數,完成了資料的封裝,類似於物件導向。

**:

def

fun():

a =1def

fun1

(num)

:print

("this is fun1"

)print

(num + a)

return fun1

if __name__ ==

"__main__"

: var= fun(

)# 此時var其實是fun1()

var(

10)

定義:裝飾器其實就是乙個閉包,把乙個函式當做引數然後返回乙個替代版函式。

1、無參裝飾器

def

func1

(func)

:# func外部被裝飾函式

deffunc2()

:print

("裝飾器函式"

)return func(

)return func2

@func1

deftest()

:print

("被裝飾函式。。"

)if __name__ ==

"__main__"

: test(

)

2、帶參裝飾器
def

arg_fun

(***, name)

:# 接收傳進來的引數

deffunc1

(func)

:# 接收被裝飾函式

deffunc2()

:if *** ==

"man"

:print

(name, ***)

func(***, name)

# 呼叫被裝飾函式並傳遞引數

if *** ==

"woman"

:print

(name, ***)

func(***, name)

# 呼叫被裝飾函式並傳遞引數

return

return func2

return func1

@arg_fun(

"man"

,"wang"

)def

man(***, name)

:print

("this is a {}, his name is {}"

.format

(***, name))

@arg_fun(

"woman"

,"li"

)def

woman

(***, name)

:print

("this is a {}, hername is {}"

.format

(***, name)

)if __name__ ==

"__main__"

: man(

) woman(

)

python裝飾器和閉包

下面幾個部落格有裝飾器的講解,也包含了裝飾器幾種情況的例子,比如說被裝飾的函式帶引數,裝飾器本身帶引數等。理解python中的裝飾器 python裝飾器學習 例子 其實裝飾器跟設計模式中的裝飾器模式基本一樣,就是在已有的函式上新增新的功能,這也是自己對裝飾器的一點簡陋的理解了。下面是自己寫的簡單例子...

python閉包和裝飾器

要理解裝飾器,就要明白閉包 要明白閉包,首先就要從高階函式和作用域說起 說道作用域,一般會談到legb規則。所謂的legb l locals,當前命名空間 區域性作用域 e enclosing,外部函式的命名空間 外部作用域 g global,全域性的命名空間 b bulit in,內建的命名空間平...

python 閉包和裝飾器

閉包的寫法,兩層函式的巢狀,外部函式返回內部函式的引用,外層函式都帶引數 def 外層函式的名稱 引數 def 內層函式的名稱 pass return 內層函式的引用 def set fun func func 254 defcall fun nonlocal func 修改外層函式的值,並且內部函...