Python3 7學習筆記25 裝飾器

2021-10-05 21:30:36 字數 2602 閱讀 8307

python3.7學習筆記25-裝飾器

我們在之前的學習中其實接觸過很多的裝飾器。它本質其實就是乙個函式。

def demo7(func):

print('模擬裝飾器')

func()

def demo8():

print('簡單裝飾器的應用')

test = demo7(demo8)

test()

/usr/local/bin/python3.7 /users/zhonglinglong/pycharmprojects/whole_world/臨時檔案.py

模擬裝飾器

簡單裝飾器的應用

process finished with exit code 0

它的標準寫法如下。@稱為語法糖。@demo7  等價與上面的 test = demo7(demo8)。只不過更加簡潔。

def demo7(func):

print('模擬裝飾器')

func()

@demo7

def demo8():

print('簡單裝飾器的應用')

demo8()

/usr/local/bin/python3.7 /users/zhonglinglong/pycharmprojects/whole_world/臨時檔案.py

模擬裝飾器

簡單裝飾器的應用

process finished with exit code 0

如果原函式有乙個引數的話 則在裝飾函式中加入引數

def demo7(func):

print('模擬裝飾器')

func(msg)

@demo7

def demo8(msg):

print('簡單裝飾器的應用'+msg)

demo8('有引數的原函式')

/usr/local/bin/python3.7 /users/zhonglinglong/pycharmprojects/whole_world/臨時檔案.py

模擬裝飾器

簡單裝飾器的應用有引數的原函式

process finished with exit code 0

如果有幾個函式都想用這個裝飾器 然後每個函式的引數還不一樣該怎麼辦? 如果自定義函式那節還有印象的話。應該馬上可以想出解決辦法。因為本質上就是函式。所以可以使用不定長元組引數和關鍵字引數

import functools

def demo7(func):

@functools.wraps(func) # 保留原函式的元資訊(函式名稱等資訊) 這個可加可不加 對功能無影響

print('模擬裝飾器')

func(*args,**kwargs)

@demo7

def demo8(msg):

print('簡單裝飾器的應用'+msg)

demo8('有引數的原函式')

裝飾器函式本身也是可以定義引數

def demo6(m):

def demo7(func):

print(m)

print('模擬裝飾器')

func(*args,**kwargs)

return demo7

@demo6('裝飾器函式的引數')

def demo8(msg):

print('簡單裝飾器的應用'+msg)

demo8('有引數的原函式')

函式可以使用多個裝飾器 

def demo6(m):

def demo7(func):

print(m)

print('模擬裝飾器6')

func(*args,**kwargs)

return demo7

def demo1(m):

def demo2(func):

print(m)

print('模擬裝飾器1')

func(*args,**kwargs)

return demo2

@demo1('裝飾器函式的引數1')

@demo6('裝飾器函式的引數6')

def demo8(msg):

print('簡單裝飾器的應用'+msg)

demo8('多個裝飾器')

/usr/local/bin/python3.7 /users/zhonglinglong/pycharmprojects/whole_world/臨時檔案.py

裝飾器函式的引數1

模擬裝飾器1

裝飾器函式的引數6

模擬裝飾器6

簡單裝飾器的應用多個裝飾器

process finished with exit code 0

裝飾器功能非常強大。一般用來列印日誌 快取 使用者登入等場景

Python3 7學習筆記03 輸入與輸出

python3.7學習筆記03 輸入與輸出。本文輸出。是指列印在編輯器的控制台。輸入是指在控制台上輸入值來執行程式 print 單行列印 print 列印1 列印2 3 for i in range 5 print i,end d python3.7 python3.exe d pythonproj...

python3 7學習之判斷閏年

閏年分為普通閏年和世紀閏年。普通閏年 能被4整除但不能被100整除的年份為普通閏年。如2004年就是閏年,1900年不是閏年 世紀閏年 能被400整除的為世紀閏年。如2000年是世紀閏年,1900年不是世紀閏年 用if語句巢狀實現 year int input 輸入乙個年份 if year 4 0 ...

Python3 7安裝部署

教你如何在 centos 7 下編譯安裝 python 3.7 與 python 2.7.5 共存。環境 centos 7.6 x64 一 安裝python 3.7 wget 如果沒有wget命令,可以使用命令安裝 yum y install wget 安裝依賴包,避免安裝過程 現的 zipimpo...