Python正課38 有參裝飾器

2022-01-30 05:17:36 字數 3042 閱讀 4680

def outter(func):

# func = 函式的記憶體位址

res=func(*args,**kwargs)

return res

@outter # outter(index)

def index(x,y):

print(x,y)

def auth(func,db_type):

name=input('your name>>>: ').strip()

pwd=input('your password>>>: ').strip()

if db_type == 'file':

print('基於檔案的驗證')

if name == 'egon' and pwd == '123':

res = func(*args, **kwargs)

return res

else:

print('user or password error')

elif db_type == 'mysql':

print('基於mysql的驗證')

elif db_type == 'ldap':

print('基於ldap的驗證')

else:

print('不支援該db_type')

# @auth # 賬號密碼的**是檔案

def index(x,y):

print('index->>%s:%s' %(x,y))

# @auth # 賬號密碼的**是資料庫

def home(name):

print('home->>%s' %name)

# @auth # 賬號密碼的**是ldap

def transfer():

print('transfer')

index=auth(index,'file')

home=auth(home,'mysql')

transfer=auth(transfer,'ldap')

# index(1,2)

# home('egon')

# transfer()

def deco(func):

name=input('your name>>>: ').strip()

pwd=input('your password>>>: ').strip()

if db_type == 'file':

print('基於檔案的驗證')

if name == 'egon' and pwd == '123':

res = func(*args, **kwargs)

return res

else:

print('user or password error')

elif db_type == 'mysql':

print('基於mysql的驗證')

elif db_type == 'ldap':

print('基於ldap的驗證')

else:

print('不支援該db_type')

return deco

deco=auth(db_type='file')

@deco # 賬號密碼的**是檔案

def index(x,y):

print('index->>%s:%s' %(x,y))

deco=auth(db_type='mysql')

@deco # 賬號密碼的**是資料庫

def home(name):

print('home->>%s' %name)

deco=auth(db_type='ldap')

@deco # 賬號密碼的**是ldap

def transfer():

print('transfer')

index(1,2)

home('egon')

transfer()

def auth(db_type):

def deco(func):

name = input('your name>>>: ').strip()

pwd = input('your password>>>: ').strip()

if db_type == 'file':

print('基於檔案的驗證')

if name == 'egon' and pwd == '123':

res = func(*args, **kwargs) # index(1,2)

return res

else:

print('user or password error')

elif db_type == 'mysql':

print('基於mysql的驗證')

elif db_type == 'ldap':

print('基於ldap的驗證')

else:

print('不支援該db_type')

return deco

def index(x, y):

print('index->>%s:%s' % (x, y))

def home(name):

print('home->>%s' % name)

@auth(db_type='ldap') # 賬號密碼的**是ldap

def transfer():

print('transfer')

# index(1, 2)

# home('egon')

# transfer()

def 有參裝飾器(x,y,z):

def outter(func):

res = func(*args, **kwargs)

return res

return outter

@有參裝飾器(1,y=2,z=3)

def 被裝飾物件():

pass

Python 有參裝飾器

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

裝飾器 有參裝飾器

有參裝飾器 是為裝飾器提供多樣功能選擇的實現提供的,實現原理是三層閉包。有參裝飾器的基本模板 def outter x defoutter1 func res func args,kwargs print x return res return return outter1 通過第三層進行傳值,使得...

有參裝飾器

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...