什麼是裝飾器,裝飾器是 python 中特殊的語法糖, 它的作用就是用來裝扮函式
在開發過程中我們都要遵循 開放封閉 原則 ,盡量別改動原來的**,更多的是擴長**功能
怎麼在不修改**的前提做到給**加功能呢,那就是裝飾器出場的時候了
# coding:utf-8
def test (func):
"""基礎裝飾器"""
print ('---1------')
func ()
print ('----2----')
return swap
@test
def test2 ():
print (2222)
test2 ()
def f1 (func):
"""對帶引數的函式進行裝飾"""
print ('對帶引數的函式進行裝飾')
func (*args, **kwargs)
@f1def test3 (x, y):
print (x + y)
test3 (1, 4)
def f2 (func):
"""對有返回值的函式進行裝飾"""
print ('對有返回值的函式進行裝飾')
ret = func ()
return ret
@f2def test4 ():
return 22
print (test4 ())
def f3 (func):
"""通用裝飾器
即對有引數有返回值的函式進行裝飾
"""ret = func (*args, **kwargs)
return ret
@f3def test5 (a, b):
print ('-----test5------')
return (a * b)
print (test5 (2, 4))
def f4 (parameter):
"""裝飾器自身帶有引數
:param parameter:
:return:
"""def f (func):
print ('我要開始加入我的裝飾器引數了(%s)' % parameter)
print ('---帶有引數的裝飾器-----')
c = func (*args, **kwargs)
return c
return f
@f4 ('haha')
def test6 (a, b):
print ('----test6----')
return a - b
print (test6 (10, 3))
裝飾器基本應用(許可權驗證,日誌寫入、等)
這裡我們以日誌為例
import os,time
# 裝飾器使用例項(寫入日誌)
def logfunc(func):
starttime=time.time()
ret = func (*args, **kwargs)
endtime=time.time()
runtime=endtime-starttime
with open(os.path.dirname(os.path.abspath('.'))+r"/test.log",'a') as f:
f.write(" 正在執行的函式是 (%s),\n"
"此函式使用到的引數是 (%s,%s),\n"
"返回值是(%s),\n "
"程式執行時間time: %s"%(func.__name__,*args,*kwargs,ret,runtime))
return ret
@logfunc
def test_log(path,name):
print(path)
print(name)
test_log('當前路徑','檔名')
Python基礎 6 函式 裝飾器
2.裝飾器 2.3.裝飾器執行時間 2.5.無法除錯 無法獲取元資料 todo 目前不太關心的 閉包 普通物件也可以作為函式使用,即有些物件不是函式,也可以呼叫。例項 lambda x,y x y 5,3 使用場景 注意事項 在匿名函式中繫結變數的值 如果直接使用,則不會記住變數的值,而是跟變數一起...
python基礎 裝飾器
裝飾器本質就是函式,功能是為其他函式新增附加功能。原則 不修改被修飾函式的源 不修改被修飾函式的呼叫方式 裝飾器的知識儲備 裝飾器 高階函式 函式巢狀 閉包 import time 定義乙個裝飾器計算函式執行時間 def timer func start time time.time res fun...
python基礎 裝飾器
裝飾器形成的過程 最簡單的裝飾器 有返回值的 有乙個引數 萬能引數 裝飾器的作用 原則 開放封閉原則 語法糖 裝飾器的固定模式 import time print time.time 獲取當前時間 time.sleep 10 讓程式在執行到這個位置的時候停一會兒 def timmer f 裝飾器函式...