Python装饰器

"""
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)

你可能感兴趣的:(Python装饰器)