装饰器
1. 装饰器
- 把一个函数当作参数传递给另一个函数 返回一个替代版的函数
- 本质上就是一个返回函数的函数
- 在不改变原函数的基础上 给函数增加功能
- 函数可以作为参数被传递
def say_hello(name):
return f"Hello {name}"
def be_some(name):
return f"Your {name}"
def greet_bob(func):
return func("Bob")
print(greet_bob(say_hello)) #在greet_bob函数中调用say_hello函数
print(greet_bob(be_some)) #在greet_bob函数中调用be_some函数
2.@修饰符- - -语法糖
修饰符@的作用: 是为现有函数增加额外的功能,常用于插入日志、性能测试、事务处理等
创建函数修饰符的规则:
- 修饰符是一个函数
- 修饰符取被修饰函数为参数
- 修饰符返回一个新函数
- 修饰符维护被维护函数的签名
举例1
def say():
# print('*********')
print('hello')
def hello():
print('!!!!!!!!!!!!!!hello')
def fun(f): ##引用函数
def inner():
print('*********')
f()
print('############')
return inner
@fun ##@修饰符就是把hello()函数传递给fun()装饰器函数
def hello():
print('!!!!!!!!!!!!!!hello')
say()
say = fun(say)
print(say)
hello()
hello = fun(hello)
hello()
举例2
def outer(f):
def inner(age):
if age <=0:
age = 0
f(age)
return inner
@outer
def say(age):
print('year old:',age)
say(-1)
say(2)