Python装饰器(Decorator)

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#没有返回值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值