函式裝飾器,可以在不改變原來的函式的情況下,在原來的函式的前面或者後面新增動作。
do something before
原來的函式動作
do something after
基本流程如下:
1. 首先定義要新增的功能函式
def 裝飾的函式(引數,此引數用來傳入正常函式的函式名)
def wrapthefunction()
do something before
引數()
do something after
retrun wrapthefunc
注意此次 return 的函式名,不帶()
2. def 正常工作的函式()
正常函式的動作
3. 在正常函式之前新增
@ 裝飾的函式
def1. 遇到 @ a_new_func,把@下面的函式名(normal_func)作為引數傳入到 a_new_func中去。即 「normal_func」 ----> 「func_name」a_new_func(func_name)
defwrapthefunc()
print ("
do something before")
func_name()
print("
do something after")
return
wrapthefunc
@a_new_func
defnormal_func():
print("
i am working normal...
")normal_func()
2. 把裝飾器中定義的函式名去代替被裝飾函式的函式名。即"wrapthefunc" ---> "normal_func"
注意:@wraps接受乙個函式來進行裝飾,並加入了複製函式名稱、注釋文件、引數列表等等的功能。這可以讓我們在裝飾器裡面訪問在裝飾之前的函式的屬性。
from functools importwraps
defdecorator_name(f):
@wraps(f)
def decorated(*args, **kwargs):
ifnot
can_run:
return
"function will not run
"return f(*args, **kwargs)
return
decorated
@decorator_name
deffunc():
return("
function is running")
can_run =true
(func())
#output: function is running
can_run =false
(func())
#output: function will not run
python函式如何寫 python如何寫函式
python函式的定義 定義函式,也就是建立乙個函式,可以理解為建立乙個具有某些用途的工具。定義函式需要用 def 關鍵字實現,具體的語法格式如下 def 函式名 形參列表 由零條到多條可執行語句組成的 塊 return 返回值 其中,用 括起來的為可選擇部分,即可以使用,也可以省略。此格式中,各部...
python如何寫日誌 python如何寫日誌
這篇文章介紹了 python 的 logging 模組,包括它的設計以及針對更多複雜案例的適用方法。這篇文章不是寫給開發者的文件,它更像是乙個指導手冊,來說明 python 的 logging 模板是如何搭建的,並且激發感興趣的人深入研究。為什麼使用 logging 模組?也許會有開發者會問,為什麼...
如何寫 如何寫好指令碼?
好的指令碼當然要有好的開場白 好的開題 破題 話題引入,好的敘述與分析 好的結束語。好的指令碼還應有好的輔助說明的素材,700 800字的指令碼,對應的素材數量如下 非真人出鏡者 素材數量需要翻倍,最好找到超過20個素材。寫好指令碼還應注意以幾點 一 開門見山 快速切入主題,這樣的話就更容易讓觀眾對...