Python三大神器之 裝飾器

2021-09-25 20:14:58 字數 2477 閱讀 3726

def

info()

:print

('這是學生資訊'

)# info()

a = info

print(id

(a))

print(id

(info))a(

)

展示:

4009632

4009632

這是學生資訊

def

info()

:return

'小王'

defsuccess()

:print

('返回值函式'

)def

printinfo

(func)

:'''

:param func:需要傳遞的是乙個函式,真正傳遞的是函式的引用

:return:

'''name = func(

)print

(name)

return success

ret_func = printinfo(info)

ret_func(

)

注意點:

函式作為返回值,函式作為引數,不能新增(),如果新增()作為的就是函式的呼叫了

def

out(k,b)

:def

fun(x)

: y = k*x +b

print

(x,y)

return fun

ret = out(10,

10)print

(ret)

ret(

10)

注意點:

在函式的內部再定義了乙個函式,並且這個函式用到了外面這個函式的變數,那麼這個函式以及用到的一些變數稱之為閉包

1、python3 的寫法

a =

100def

outer

(num=2)

:def

inner()

:nonlocal num

num = num +

1print

('將引數加1'

,num+1)

return inner

ret = outer(

)ret(

)

legb原則:

l local 本地作用域(區域性變數)

e enclosure 閉包所在作用域

g global 全域性變數

b built-in 內建

2、 python2的寫法

def

outer1

(num=2)

: list_new =

[num]

definner()

: list_new[0]

+=1print

('將引數加1'

,num+1)

return inner

寫**遵循開放封閉原則

已經實現功能的封閉,已經實現功能的**不允許被修改,但是可以被擴充套件

def

authtificate

(func)

:'''

:param func: 需要進行登入驗證的函式的引用

:return:

'''definner()

:if'使用者是登入'

:print

('已經經過裝飾器了'

) func(

)else

:print

('使用者沒有登入'

)return inner

@authtificate

defpay()

:# print('驗證登入')

# authtificate()

print

('付款'

)def

chage_password()

:# print('驗證登入')

# authtificate()

print

('修改密碼'

)

def

(func)

:print

('進入裝飾器'

)def

inner()

:print

('真正執行裝飾'

) func(

)print

('裝飾已經完成'

)return inner

definfo()

:print

('這是被裝飾的函式'

)print

('#######################'

)info(

)# ret()

python三大神器 裝飾器

裝飾器 decorator 能增強now 函式的功能,比如,在函式呼叫前後自動列印日誌,但又不希望修改now 函式的定義,這種在 執行期間動態增加功能的方式,稱之為。本質上,decorator就是乙個返回函式的高階函式。所以,我們要定義乙個能列印購物的decorator,可以定義如下 def inn...

搞定三大神器之 Python 裝飾器

學會 python 裝飾器 裝飾器,幾乎各大python框架中都能看到它的身影,足以表明它的價值!它有動態改變函式或類功能的魔力!本專題的目錄 學會 python 裝飾器 1 什麼是裝飾器 2 裝飾器的結構 3 為什麼要這樣 4 裝飾乙個函式 5 裝飾乙個類 6 裝飾器層疊 7 溫馨提醒 總結1 什...

python三大神器裝飾器 Python 裝飾器

裝飾器 本質是函式,用於裝飾其他函式,為其他函式新增附加功能 原則 1.不能比修改被裝飾的函式的 2.不能修改被裝飾的函式的呼叫方式 import time def timmer func def warpper args,kwargs start time time.time func stop ...