Python中的装饰器
1. 什么是装饰器
把一个函数当作参数传递给另一个函数,返回一个替代版的函数;
本质上就是一个返回函数的函数,在不改变原函数的基础上,给函数增加功能,函数可以作为参数被传递。
2. 装饰器的用法
举例1:
def say():
print('hello')
#定义一个装饰器(装饰器本身也是一个函数,只不过它的返回值也是函数)
def fun(f):
def inner():
print('*********')
f()
print('############')
return inner()
a=fun(say)
print(a)
输出结果:
*********
hello
############
None
举例2:
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)) #将say_hello函数当作参数传递给greet_bob函数
print(greet_bob(be_some)) #将be_some函数当作参数传递给greet_bob函数
输出结果:
Hello Bob
Your Bob
3. 语法糖(@修饰符)
修饰符@的作用: 是为现有函数增加额外的功能,常用于插入日志、性能测试、事务处理等。
创建函数修饰符的规则:
- 修饰符是一个函数
- 修饰符取被修饰函数为参数
- 修饰符返回一个新函数
- 修饰符维护被维护函数的签名
举例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:用装饰器判断输入的年龄是否小于0
#定义装饰器
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(10)
输出结果:
year old: 0
year old: 10
Kaiser king
发布了73 篇原创文章 · 获赞 6 · 访问量 2129
私信
关注