"""
author:Popma
title: 裝飾器
"""
裝飾器實(shí)際上就是一個(gè)函數(shù)
2個(gè)特別之處:
1.參數(shù)是一個(gè)函數(shù)
2.返回值也是一個(gè)函數(shù)
注意:1. 裝飾器中定義的函數(shù),要使用args,*kwargs傳入响蕴,并且在這個(gè)函數(shù)里執(zhí)行原始函數(shù)也要傳入
2. 需要使用functools中的wraps沛善,避免改變傳入裝飾器的原始函數(shù)的name值
任務(wù):在所有函數(shù)之前打印helloworld
from functools import wraps
def my_log(func):
@wraps(func) #加上run.name就不顯示為wapper,不更改原來(lái)函數(shù)的name了
def wrapper(args,kwargs): #args:a,b, *kwargs:c=a(關(guān)鍵字參數(shù))
print('helloworld')
func(args)
return wrapper #返回的是一個(gè)函數(shù)體
@my_log #run = my_log(run)
def run():
print('run')
run.name : run函數(shù)的名稱(chēng)
print('run.name:',run.name) # wapper
@my_log #add = my_log(add)
def add(a,b):
print('{} + {} = {}'.format(a,b,a+b))
run()
add(1,2)