Python基础—装饰器(Decorator)

装饰器(Decorators)是Python的一个重要部分,相信大多初学者难以理解,这里会分享装饰器具体的一些用法

定义

在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)

装饰器实际上就是一个闭包,把一个函数当做函数参数传入,然后返回一个替代版函数,本质上就是一个返回函数的高阶函数

简单的装饰器

有一个功能函数now(),主要作用是打印日期,现在想要在不改变now()的前提下增加一些功能,比如在日期的上一行打印一排“*”。这时候就可以用到装饰器啦,具体实现代码如下:

def outer(func):
    def inner():
        print("*********")
        return func()
    return inner

@outer
def now():
    print("2019-06-13")

now()

从上面的代码我们可以知道装饰器的一个语法,如下:

def outer(func):
    def inner():
        #增强的功能
        #在内函数中执行func函数
        return func()
    return inner

@outer
def func():
    函数体

在装饰器中,分为外函数(outer)与内函数(inner)

外函数(outer):
1.将被装饰的函数(func)传递进来
2.将装饰好的函数(inner)返回给调用者

内函数(inner):
1.添加动态增加的功能
2.执行被装饰的函数

内函数中return什么时候可以省略?

注意:当被装饰的函数没有返回值的时候,内函数的return可以省略;若被装饰的函数中存在返回值,则内函数的return则不能省略。

@的功能:将被装饰的函数的函数名作为参数传递给外函数,将外函数返回的替代版的函数赋值给原本的函数。

带参数的装饰器

装饰器允许传入参数,具体语法如下:

def outer(func):
    def inner(参数列表):
        #添加增加的功能
        return func(参数列表)
    return inner
  
@outer
def func(参数列表):
	函数体

注意:
1.使用内函数来接收被装饰函数的参数
2.调用被装饰的函数的时候,需要将参数传递进去。

案例1:使用装饰器,给getAge函数添加一个对年龄的限制,年龄[0,160]

def getAge(age):
    print("您的年龄为%d" % age)

具体实现代码如下:

def outer(func):
    def inner(age):
        if age >= 0 and age <= 160:
            func(age)
        else:
            print("年龄有误")
    return inner

@outer
def getAge(age):
    print("您的年龄为%d" % age)

getAge(100)		#您的年龄为100
getAge(200)		#年龄有误

案例2:使用装饰器,给getMoney函数添加一个对金额的限制:1.必须全是数字 2.必须大于0

def getMoney(mon):
    return int(mon)

具体实现代码如下:

def moneydec(func):
    def inner(mon):
        if mon.isdecimal():
            return func(mon)
        else:
            print("金额有误")
    return inner

@moneydec
def getMoney(mon):
    return int(mon)

print(getMoney("123"))
print(getMoney("-123"))
print(getMoney("xyz"))

运行结果如下:

123
金额有误
None
金额有误
None
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值