装饰器
定义:作用在代码运行期间动态的增加功能。本质上是返回函数的高阶函数。
装饰函数,用于在已经定义好的某一个函数(或代码段)使用时,输入或者操作自己想要的数据。
#一个已有的代码:
def Hello():
print(' Word!')
函数对象中,可以拿到函数名字的一个属性是:__name__
注意这里是前后两个下划线:._ _name_ _
(我将中间放一个空格为了方便看清楚,实际使用时不用中间的空格)
> > > Hello.__name__
> > > 'Hello'
> > > f=Hello
> > > f()
> > > Word!
使用装饰函数,在调用Hello函数时,进行一些操作。
1.装饰器无参数,函数无参数
装饰函数中要把需要被装饰的函数当做参数传进去
def decorator(func):
print('%s '%func.__name__,end='')
#返回被装饰的函数
return func
装饰函数来装饰Hello函数
@decorator
def Hello():
print(' Word!')
打印被装饰好的函数
Hello()
输出: Hello Word!
2.装饰器无参数,函数有参数
def decorator(func):
print('%s'%func.__name__,end='')
return func
@decorator
def Hello(string):
print(string,'❤')
Hello(' python ')
输出:
Yeah!
Hello python ❤
3.装饰器参数,函数有参数
def decorator(*string):
def func(func):
print('%s'%string)
print('%s'%func.__name__,end='')
return func
return func
@decorator('Yeah!')
def Hello(string):
print(string,'❤')
Hello(' python ')
输出:
Yeah!
Hello python ❤
4.通用
def decorator(*string):
if len(string)>1:
def func1(func):
print(string)
print('%s'%func.__name__,end='')
return func
return func1
else:
def func2(func):
print('no string')
print('%s'%func.__name__,end='')
return func
return func2