裝飾器 decorators
裝飾器的定義
裝飾器是乙個函式,這函式的主要作用是包裝另乙個函式或類
包裝的目的是在不改變原函式名的情況下改變被包裝物件的行為
函式裝飾器 function decorators
函式裝飾器是指裝飾器是乙個函式,傳入的是乙個函式,返回的也是乙個函式
示意:
@後跟的函式就是裝飾函式,當執行被裝飾函式時,相當於把hello函式作為引數傳入mydeco函式中執行fx函式def mydeco(fn): # 裝飾函式
def fx():
print("++++++++")
fn()
print("--------")
return fx
@mydeco
def hello():# 被裝飾函式
print("hello world")
hello() # 呼叫者
示意二:
乙個函式也可以有多個裝飾器def fun(x):
def fun1():
ret = 10 * 20
x(ret)
return fun1
@fun
def fun2(q):
print(q)
fun2()
列如:
當乙個函式同時被多個裝飾器進行裝飾的時候,按照從上到下的順序依次進行執行def fun1(fn):
def fx():
print("hi")
fn()
return fx
def fun2(fn):
def fx():
print("hello")
fn()
return fx
@fun1
@fun2
def fun3():
print("小明")
fun3()
閉包 closure
定義:將內嵌函式的語句和這些語句的執行環境打包在一起後,得到的函式物件稱為閉包
實現閉包必須要滿足以下三個條件:
1.必須有乙個內嵌函式
2.內嵌函式必須引用外部函式中的變數
3.外部函式返回值必須是內嵌函式
說明如果乙個內嵌函式訪問了外部巢狀函式作用域內的變數,則這個內嵌函式就是閉包
示意:
def fun(x):
def fun2():
return 5**x
return fun2
fn=fun(2)
print(fn())
python 裝飾器的詳解和使用
裝飾器就是 函式名 加在被裝飾函式之前。有時候我們需要對函式功能進行擴充套件,但是又必須遵守開閉原則 ocp 不能修改函式,這時候就需要使用裝飾器。事實上,當我們想要擴充套件函式功能或者修改函式時,直接修改函式中的某幾行 就可以實現。但是這是有弊端的。綜合以上三點,這裡我們使用裝飾器就再好不過了。直...
python 裝飾器的使用
使用裝飾器將函式作為引數,最後再返回乙個引數,簡單來說就是在不修改原函式的 上對原函式新增新的功能。1 在原函式中新增乙個裝飾器 原函式 def sayhello print hello,world sayhello 新增裝飾器後 import functools def decorator fun...
python裝飾器的使用
在class內部,可以有屬性和方法,而外部 可以通過直接呼叫例項變數的方法來運算元據,這樣,就隱藏了內部的複雜邏輯。但是,從前面student類的定義來看,外部 還是可以自由地修改乙個例項的name score屬性 如果要讓內部屬性不被外部訪問,可以把屬性的名稱前加上兩個下劃線 在python中,例...