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()
if user == 'egon' and pwd == '123':
print('login successful')
# 記錄使用者登陸狀態
current_user['user']=user
res=func(*args,**kwargs)
return res
else:
print('user or password error')
@deco
def index():
print('welcome to index page')
time.sleep(1)
@deco
def home(name):
print('welecome %s to home page' %name)
time.sleep(0.5)
index()
home('egon')
def f1():
x=1def f2():
def f3():
print(x)
return f3
return f2
f2=f1()
f3=f2()
f3()
import time
current_user=
def auth(engine='file'):
def deco(func):
if current_user['user']:
#已經登陸過
res = func(*args, **kwargs)
return res
user=input('username>>: ').strip()
pwd=input('password>>: ').strip()
if engine == 'file':
# 基於檔案的認證
if user == 'egon' and pwd == '123':
print('login successful')
# 記錄使用者登陸狀態
current_user['user']=user
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 deco
def index():
print('welcome to index page')
time.sleep(1)
@auth(engine='mysql')
def home(name):
print('welecome %s to home page' %name)
time.sleep(0.5)
index()
home('egon')
裝飾器 有參裝飾器
有參裝飾器 是為裝飾器提供多樣功能選擇的實現提供的,實現原理是三層閉包。有參裝飾器的基本模板 def outter x defoutter1 func res func args,kwargs print x return res return return outter1 通過第三層進行傳值,使得...
Python 有參裝飾器
由於語法糖 的限制,outter函式只能有乙個引數,並且該才是只用來接收 被裝飾物件的記憶體位址 def outter func func 函式的記憶體位址 def args,kwargs res func args,kwargs return res outter outter index def...
python裝飾器 有殘裝飾器 無參裝飾器
裝飾器 修飾別人的工具,修飾新增功能,工具指的是函式 裝飾器本身可以是任何可呼叫物件,被裝飾的物件也可以是任意可呼叫物件 為什麼要用裝飾器 開放封閉原則 對修改是封閉的,對擴充套件是開放的 裝飾器就是為了在不修改被裝飾物件的源 以及呼叫方式的前提下,為期新增新功能 基本裝飾器 usr bin pyt...