程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python裝飾器使用

編輯:Python

1 裝飾器

裝飾器是一種設計模式,起到裝飾的作用。就是在不修改函數代碼的情況下,給函數增加一些功能。

1.1 沒有使用裝飾器的例子

現有一個返回字符串的函數,在不修改該函數的情況下,將返回的字符串轉換為大寫字符串。

def uppercase_decorator(func): # 定義一個函數,其參數func是函數類型參數
def inner(): # 嵌套函數inner
s = func() # 調用func()函數並將返回值賦值給s變量
make_uppercase = s.upper() # 將字符串轉換為大寫並賦值給make_uppercase
return make_uppercase # 結束嵌套函數func()調用,返回轉換之後的字符串
return inner # 結束函數uppercase_decorator()調用, 返回嵌套函數inner
def say_hello():
return 'hello world.'
if __name__=="__main__":
say_hello2 = uppercase_decorator(say_hello) # 調用uppercase_decorator()函數,實參是say_hello()函數,返回值say_hello2變量也是一個函數
print(say_hello2()) # 調用say_hello2函數

1.2 使用裝飾器

Python提供了裝飾器注釋功能,裝飾器本質上是一個函數。
上述代碼使用裝飾器修改如下:

def uppercase_decorator(func):
def inner():
s = func()
make_uppercase = s.upper()
return make_uppercase
return inner
@uppercase_decorator # 使用@uppercase_decorator裝飾器聲明say_hello1()函數
def say_hello1():
return "zhang cheng."
if __name__=="__main__":
print(say_hello1()) # 使用裝飾器不需要顯式調用uppercase_decorator()函數,直接調用say_hello1()函數即可。

1.3 同時使用多個裝飾器

一個函數可以有多個裝飾器聲明。

def uppercase_decorator(func): # 將字符串轉換成大寫
def inner():
s = func()
make_uppercase = s.upper()
return make_uppercase
return inner
def backet_decorator(func): # 給字符串添加括號
def inner():
s = func()
make_bracket = '(' + s + ')'
return make_bracket
return inner
@backet_decorator
@uppercase_decorator
def say_hello():
return 'hello world.'
if __name__=="__main__":
print(say_hello())

1.4 給裝飾器傳遞參數

裝飾器本質上是函數,因此可以給裝飾器傳遞參數。

def calc(func): # 定義裝飾器函數calc(func),其參數還是一個函數
def wrapper(arg1): # 定義嵌套函數wrapper(arg1),這個函數參數列表與裝飾器要注釋的函數參數列表一致
return func(arg1)
return wrapper
@calc
def square(n):
return n * n
@calc
def abs(n):
return n if n > 0 else -n
if __name__=="__main__":
print(f"3's square is {
square(3)}")
print(f"-30's absulate is {
abs(-30)}")

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved