裝飾器 有參裝飾器

2022-09-03 03:48:10 字數 1855 閱讀 4960

有參裝飾器:

是為裝飾器提供多樣功能選擇的實現提供的,實現原理是三層閉包。

有參裝飾器的基本模板:

def

outter(x):

defoutter1(func):

res = func(*args,**kwargs)

print

(x)

return

res

return

return outter1

通過第三層進行傳值,使得有參裝飾器可以使用其他引數,實現其他功能。

有參裝飾器的魔法糖

@outter('

msj')#

可以被看做

#f1 = outter1(f1)

#

有參裝飾器的例項:

def auth2(engine='

file'):

defauth(func):

if user_info['

current_user

'] is

notnone:

res=func(*args,**kwargs)

return

res inp_user=input('

username>>>:

').strip()

inp_pwd=input('

password>>>:

').strip()

if engine == '

file':

print('

基於檔案的認證')

if inp_user == '

egon

'and inp_pwd == '

123'

:

#記錄登入狀態

user_info['

current_user

']=inp_user

print('

login successful')

res=func(*args,**kwargs)

return

res

else

:

print('

user or password error')

elif engine == '

mysql':

print('

基於mysql資料的認證')

elif engine == '

ldap':

print('

基於ldap的認證')

else

:

print('

無法識別認證源')

return

return

auth

@auth2(engine='

mysql

') #

defindex():

"""這是index功能

"""print('

welcome to index page')

time.sleep(2)

return 123@auth2(engine='

file')

defhome(name):

"""這是home功能

"""print('

welcome %s to home page

' %name)

time.sleep(1)

index()

#home('

egon

')

有參裝飾器

import time current user def deco func if current user user 已經登陸過 res func args,kwargs return res user input username strip pwd input password strip i...

python裝飾器 有殘裝飾器 無參裝飾器

裝飾器 修飾別人的工具,修飾新增功能,工具指的是函式 裝飾器本身可以是任何可呼叫物件,被裝飾的物件也可以是任意可呼叫物件 為什麼要用裝飾器 開放封閉原則 對修改是封閉的,對擴充套件是開放的 裝飾器就是為了在不修改被裝飾物件的源 以及呼叫方式的前提下,為期新增新功能 基本裝飾器 usr bin pyt...

Python 有參裝飾器

由於語法糖 的限制,outter函式只能有乙個引數,並且該才是只用來接收 被裝飾物件的記憶體位址 def outter func func 函式的記憶體位址 def args,kwargs res func args,kwargs return res outter outter index def...