Python 裝飾器的定義和使用,閉包的定義和使用

2021-08-21 21:08:46 字數 1343 閱讀 3118

裝飾器 decorators

裝飾器的定義

裝飾器是乙個函式,這函式的主要作用是包裝另乙個函式或類

包裝的目的是在不改變原函式名的情況下改變被包裝物件的行為

函式裝飾器 function decorators

函式裝飾器是指裝飾器是乙個函式,傳入的是乙個函式,返回的也是乙個函式

示意:

def mydeco(fn):  # 裝飾函式

def fx():

print("++++++++")

fn()

print("--------")

return fx

@mydeco

def hello():# 被裝飾函式

print("hello world")

hello() # 呼叫者

@後跟的函式就是裝飾函式,當執行被裝飾函式時,相當於把hello函式作為引數傳入mydeco函式中執行fx函式

示意二:

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中,例...