1. 定義
本質是函式,用來裝飾其他函式,為其他函式新增附加功能
2. 原則
a. 不能修改被裝飾函式的源**
b. 不能修改被裝飾的函式的呼叫方式
3. 實現裝飾器知識儲備
a. 函式就是變數
b. 高階函式
i. 把乙個函式當作實參傳給另外乙個函式,在不修改被裝飾函式源**情況下為其新增功能
ii. 返回值中包含函式名, 不修改函式的呼叫方式
c. 巢狀函式
高階函式+巢狀函式==》裝飾器
# www.cppcns.comauthor: lockegogo
user, passwd = 'lk', '130914'
def auth(auth_type):
print('auth func:', auth_type)
def outher_wrapper(func):
def wrapper(*args, **kwargs):
print('wrapper func:', *args, **kwargs)
if auth_type == 'local':
username = input('username:').strip()
password = input('password:').strip()
if user == username and password == passwd:
print('\033[32;1muser has pas程式設計客棧sed authentication\033[0m')
res = func(*args, **kwargs)
return res
else:
exit('\033[32;1minvalid username or password\033[0m')
elif auth_type == 'ldap':
print('ldap,不會')
return wrapper
return outher_wrapper
def index():
print('welcome to index page')
@auth(程式設計客棧auth_type='local') # home = outher_wrapper(home)
def home():
print('welcome to home page'rvghfd)
rwww.cppcns.cometurn 'from home'
@auth(auth_type='ldap')
def bbs():
print('welcome to bbs page')
index()
print(home())
bbs()
decorator
本文標題: 詳解python裝飾器
本文位址:
python裝飾器 python 裝飾器詳解
def outer x def inner y return x y return inner print outer 6 5 11 如 所示,在outer函式內,又定義了乙個inner函式,並且inner函式又引用了外部函式outer的變數x,這就是乙個閉包了。在輸出時,outer 6 5 第乙個...
python裝飾器詳解 python裝飾器詳解
按照 python 的程式設計原則,當乙個函式被定義後,如要修改或擴充套件其功能應盡量避免直接修改函式定義的 段,否則該函式在其他地方被呼叫時將無法正常執行。因此,當需要修改或擴充套件已被定義的函式的功能而不希望直接修改其 時,可以使用裝飾器。先來看乙個簡單的例子 def func1 functio...
詳解Python裝飾器
裝飾器的難點 在梳理了裝飾器的整個內容之後,我認為難點不是裝飾器本身,而是直接呼叫被裝飾的函式,讓人無法理解背後究竟發生了什麼。一 引出裝飾器概念 引入問題 定義了乙個函式,想在執行時動態的增加功能,又不想改動函式本身的 示例 希望對下列函式呼叫增加log功能,列印出函式呼叫 def f1 x re...