python装饰器系列教程(1)

若为了与用户交互,有如下代码

def messageOne():
    print("今天天气是晴转多云")

def messageTwo():
    print("今天的空气质量为优")

messageOne()
messageTwo()

现需在每条提示信息之前加上一条关于客户来自中国的信息,可改写为

def messageOne():
    print("你好,来自中国的用户")
    print("今天天气是晴转多云")

def messageTwo():
    print("你好,来自中国的用户")
    print("今天的空气质量为优")

messageOne()
messageTwo()

但这会造成代码冗余,有没有更好的方法?有的:

def messageOne():
    print("今天天气是晴转多云")

def messageTwo():
    print("今天的空气质量为优")

def addChina(func):
    def inner():
        print("你好,来自中国的用户")
        func()
    return inner

messageOne = addChina(messageOne)
messageTwo = addChina(messageTwo)

messageOne()
messageTwo()

这里需要用到一点函数变量的知识,可参考https://blog.csdn.net/qq_45812220/article/details/137741680?spm=1001.2014.3001.5501

总之,这段代码通过一个闭包操作,给原来的2个函数额外增加了新功能。

在此基础上,python提供了一种被称为语法糖的写法,以一种更简单的写法,实际实现相同的功能

def addChina(func):
    def inner():
        print("你好,来自中国的用户")
        func()
    return inner


def messageOne():
    print("今天天气是晴转多云")

def messageTwo():
    print("今天的空气质量为优")

messageOne()
messageTwo()

此处的两句@addChina语句等效于实现了之前的

messageOne = addChina(messageOne)
messageTwo = addChina(messageTwo)

操作

现在大家已经初步掌握装饰器的用法了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值