Python装饰器(Decorator)
1、定义
在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)
2、简单装饰器
最简单的装饰器基本格式:
def outer(func):
def inner():
#增强的功能
#在内函数中执行func函数
return func()
return inner
在装饰器中,分为外函数与内函数:
外函数(outer):
1.将被装饰的函数传递进来--》func
2.将装饰好的函数返回给调用者 --》inner
内函数(inner):
1.添加动态增加的功能
2.执行被装饰的函数
内函数中return什么时候可以省略?
注意:当被装饰的函数没有返回值的时候,内函数的return可以省略,
若被装饰的函数中存在返回值,则内函数的return则不能省略。
@装饰器
def func():
pass
@的功能:将被装饰的函数的函数名作为参数传递给外函数,将外函数返回的
替代版的函数赋值给原本的函数。
示例:
def outer(func):
def inner():
print("*********")
return func()#被装饰的函数有return值
return inner
@outer
def now():
print("2019-6-13")
return True
print(now())
#结果
*********
2019-6-13
True
3、复杂一些的装饰器
格式:
def outer(func):
def inner(参数列表):
#添加增加的功能
return func(参数列表)
return inner
注意:
1.使用内函数来接收被装饰函数的参数
2.调用被装饰的函数的时候,需要将参数传递进去。
举例
def moneydec(func):
def inner(mon):
#判断获取的mon是否是:正号开头and在[1:]范围是否全是数字or直接是否全是数字
if mon.startswith("+") and mon[1:].isdecimal() or mon.isdecimal():
return func(mon)
else:
print("金额有误")
return inner
# 需求是获取钱的金额,要求: 1.必须是数字 2.必须大于0
@moneydec
def getMoney(mon):
return int(mon)
print(getMoney("123"))
print(getMoney("+123"))
print(getMoney("-123"))
#结果
123
123
金额有误
None#没有返回值