首页 > 技术文章 > python语法糖之有参装饰器、无参装饰器

zero17 2021-12-12 11:00 原文

python的装饰器简单来说就是函数的一种形式,是为了扩展原来的函数功能而设计的。

装饰器的特别之处在于它的返回值也是一个函数,可以在不改变原有函数代码的基础上添加新的功能

# 先定义一个函数及引用
# 思路:
# outer 函数相当于 decorator的func参数
# outoo 调用decorator,将outer传入到函数当中
# 函数返回的是 decorator内部的inner函数 执行outoo相当于执行inner
def decorator(func):
def inner(*args, **kwargs):
print('start!')
return func(*args, **kwargs)
return inner

def outer():
print('end!')

outoo = decorator(outer)
outoo()
# 装饰器的使用:
# 在outer函数之前直接使用装饰器 @decorator 相当于执行了 outoo = decorator(outer)
def decorator(func):
def inner(*args, **kwargs):
print('start!')
return func(*args, **kwargs)
return inner


@decorator
def outer():
print('end!')
outer()

上面的内容都是无参装饰器的定义,而如果我想指定打印的值就需要有参装饰器的介入
# 实现思路:
# 在上面无参装饰器的外部嵌套一层外部函数,让外部函数的参数接受指定的打印内容,并将decorator作为返回值
def outer(can):
def decorator(func):
def inner(*args, **kwargs):
print(can)
return func(*args, **kwargs)
return inner
return decorator


@outer('start')
def outer():
print('end!')
outer()

 

推荐阅读