python基礎之裝飾器

2021-09-30 17:05:24 字數 2555 閱讀 6660

裝飾器的本質是乙個閉合函式,該閉合函式的自由變數是乙個函式,可以使**的重要性與擴充套件性大大加強。

通過@後新增裝飾器函式

# 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.滿足上述條件任意乙個,都可稱之為高階函式 以下 實現了為...