"""
author:Popma
title: 装饰器
"""
装饰器实际上就是一个函数
2个特别之处:
1.参数是一个函数
2.返回值也是一个函数
注意:1. 装饰器中定义的函数,要使用args,*kwargs传入,并且在这个函数里执行原始函数也要传入
2. 需要使用functools中的wraps,避免改变传入装饰器的原始函数的name值
任务:在所有函数之前打印helloworld
from functools import wraps
def my_log(func):
@wraps(func) #加上run.name就不显示为wapper,不更改原来函数的name了
def wrapper(args,kwargs): #args:a,b, *kwargs:c=a(关键字参数)
print('helloworld')
func(args)
return wrapper #返回的是一个函数体
@my_log #run = my_log(run)
def run():
print('run')
run.name : run函数的名称
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)
网友评论