Python裝飾器掌握技巧

2021-09-26 15:07:14 字數 981 閱讀 9355

一# coding=utf-8

二def login_checking(fun_name):

三 def inner():

四 print("登入驗證...")

五 return fun_name()

六 return inner()

七@login_checking # login_checking(login)

八def login():

九 print("登入成功1")

login():執行login() 函式

七@login_checking  # login_checking(login)

八def login():

第七行是python裝飾器的語法糖,固定寫法,放在哪個函式前面就表示裝飾哪個函式

@login_checking  就等價於:login_checking(login)

當執行這個指令碼的時候,

首先執行:二def login_checking(fun_name):  函式login_checking被宣告,但是不會執行函式login_checking

接著執行:七@login_checking  # login_checking(login),剛才說過,funcname()會執行函式體(帶括號的函式名)

所以會跳到:三    def inner():仍然從上往下執行,只宣告,不執行inner函式

再往下:六    return inner(),這句是先執行inner() 再將值返回

執行inner會跳到inner() 內部,執行

四        print("登入驗證...")

五        return :

大家可以開啟斷點除錯一下,就是這麼簡單

python裝飾器 Python 裝飾器

簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入 裡面修改,例如 這是我們最原始的的乙個函式,然後我們試圖記錄...

python實用小技巧之裝飾器

python的裝飾器 假設我們要給很多函式統計函式執行時間,一般情況我們會給每個函式做如下處理 import time deffun t1 time.time 函式體.t2 time.time print t2 t1 如果加上裝飾器以後就不需要每個函式都做上面的處理。import time defs...

python裝飾器 裝飾器

由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2015 3 25 f now f 2015 3 25 函式物件有乙個 name 屬性,可以拿到函式的名字 now.name now f.name now 現在,假設我們要增強now 函式的...