定義:函式內的屬性,都是有生命週期的都在函式執行期間存活。
內部函式對外部函式作用域裡的變數的引用
閉包內的閉包函式私有化了變數,完成了資料的封裝,類似於物件導向。
**:
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 修改外層函式的值,並且內部函...