python装饰器系列教程(6)(结束篇)

上一篇的教程可查看https://blog.csdn.net/qq_45812220/article/details/137815537?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22137815537%22%2C%22source%22%3A%22qq_45812220%22%7D

本篇为装饰器系列的最后一篇:含有参数的装饰器。先看代码:

def addSymbol(func):
    def inner(*args,**kwargs):
        print("-" * 30)
        res = func()
        return res
    return inner


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

message()

执行结果为

------------------------------
今天的天气是晴转多云

既,在原打印语句前加上分隔符-。但是,如果我想将分隔符换为+号呢?重新定义一个装饰器当然可以,但我们这里直接讨论带有参数的装饰器应该怎么做。

我们来看语句@addSymbol,这一句我们之前讨论过,等效于message = addSymbol(message)(当然,如果用这句语句来替换@addSymbol,应该将该语句放在message函数定义的后面才行),也就是说,这个语法糖等效于一个语句,而这个语句只能接收一个参数,而这个参数还正好是要被修饰的函数名。那么,就没有办法传递其他参数了吗?

我们可以将原先的装饰器定义在一个新函数getDecorator中,让新函数根据接收的参数返回一个对应于想要添加符号的旧函数

def getDecorator(symbol):
    def addSymbol(func):
        def inner(*args, **kwargs):
            print(symbol * 30)
            res = func()
            return res

        return inner
    return addSymbol

("+")
def message():
    print("今天的天气是晴转多云")

message()

执行结果:

++++++++++++++++++++++++++++++
今天的天气是晴转多云

读者也可以将@getDecorator("+")中的加号进行任意修改

至此,装饰器系列讲解完成。如有错误,欢迎指出

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值