裝飾器的本質是乙個閉合函式,該閉合函式的自由變數是乙個函式,可以使**的重要性與擴充套件性大大加強。
通過@後新增裝飾器函式
# def checkparams(fn):
# """只接受字串的裝飾器"""
# if isinstance(strname,(str)):#判斷是否是字串型別
# return fn(strname)#如果是則呼叫fn(strname),返回計算結果
# print("variable strname is not a string type")
# return
def checkparams(fn):
"""能夠接收任何引數的通用引數裝飾器"""
if isinstance(arg[0],(str)):#判斷第乙個引數是否是字串
return fn(*arg,**kwargs)
return
@checkparams
def recoder(age):
print("姓名:",strname,"年紀:",age)
return recoder
fun(37)#為age賦值
fun(37)#沒有輸出顯示
def isadmin(userid):
"""可接收引數的通用裝飾器"""
def checkparams(fn):
if userid!='admin':#
print("operation is prothibited as you are not admin!")
return
if isinstance(arg[0],(str)):#判斷是否是字串
return fn(*arg,**kwargs)
print("variable strname is not a string type")
return
return checkparams
@isadmin(userid="admin")
def recoder(age):
print("姓名:",strname,"年紀:",age)
return recoder
@isadmin(userid="user")
def recoder(age):
print("姓名:",strname,"年紀:",age)
return recoder
fun(20)
# fun1(37)
除了通過@加函式匯入裝飾器,還可以通過
實現裝飾器匯入。
將不同的裝飾器使用@符號一行一行的疊堆起來
@isadmin(userid="admin")
@checkparams
當函式被裝飾完後,對函式的名字屬性再賦一次值,將函式的名稱恢復過來
# import functools
def isadmin(userid):
def checkparams(fn):
# @functools.wraps(fn)#保證修飾後的函式與原函式的名稱一致
if userid!="admin":
print("operation is prohibited as you are not admin!")
return
if isinstance(arg[0],(str)):
return fn(*arg,**kwargs)
print("variable strname is not a string type")
return
return checkparams
@isadmin(userid="admin")
def recoder(age):
print("姓名:",strname,"年紀:",age)
return recoder
fun(22)
import requests
def retry(attempt): #定義裝飾器函式
def decorator(func):
att=0
while attprint(att)
try: #使用try except捕獲異常
return func(*args,**kw) #執行請求
except exception as e:
att+=1 #調整計數器
return decorator
@retry(attempt=3)
def get_response(url):
r=requests.get(url)
return r
url=""
r=get_response(url)
print(r)
if (r!=none):
print(r.content.decode("utf-8"))
Python基礎之裝飾器
器 工具 裝飾 新增新功能 裝飾器就是定義乙個函式,用該函式去為其他函式新增新功能開放封閉原則 針對上線的功能對拓展是開放的,但是對修改源 以及呼叫方式是封閉的 裝飾器就是在遵循開放封閉原則的前提下為被裝飾物件新增新功能 1 不修改被裝飾物件的源 1 不修改被裝飾物件的呼叫方式 需求 為index加...
Python基礎之裝飾器
器即函式 裝飾即修飾,意指為其他函式新增新功能。裝飾器定義 本質就是函式,功能是為其他函式新增新功能。1.不修改被裝飾函式的源 開放封閉原則 2.為被裝飾函式新增新功能後,不修改被修飾函式的呼叫方式。不用傳引數來使用裝飾器。以下的操作是為函式foo來增加新的計時功能 不改變原函式的 和呼叫方式 im...
python基礎之裝飾器
裝飾器 本質就是函式,功能是為其他函式新增附加功能 原則 1.不修改被修飾函式的源 2.不修改被修飾函式的呼叫方式 裝飾器的知識儲備 裝飾器 高階函式 函式巢狀 閉包 高階函式 1.函式接收的引數是乙個函式名 2.函式的返回值是乙個函式名 3.滿足上述條件任意乙個,都可稱之為高階函式 以下 實現了為...