python之装饰器2-高阶

本文介绍了一个使用Python装饰器实现的功能示例,通过装饰器为不同的函数添加了性别分类的功能,以此来记录并打印出被装饰函数传入的年龄参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import time

boy_age = []
girl_age = []
def fenlei(sex):
    def outer(func):
        def deco(*args,**kwargs):
            if sex == "boy":
                ret = func(*args,**kwargs)
                boy_age.append(args[1])
                print("I am a boy,our boys's ages are %s" % str(boy_age))
                return ret
            else:
                ret = func(*args,**kwargs)
                girl_age.append(args[1])
                print("I am a girl,our boys's ages are %s" % str(girl_age))
                return ret
        return deco
    return outer

@fenlei("boy")
def child1(name,age):
    print("my name is %s,I am %s years old" % (name,age))
    return "from child1"

@fenlei("girl")
def child2(name,age):
    print("my name is %s,I am %s years old" % (name,age))
    return "child2"

@fenlei("boy")
def child3(name,age):
    print("my name is %s,I am %s years old" % (name,age))
    return "child2"

print(child1("Tom",7))
child2("Anna",8)
child3("jack",9)

-----------------------------
my name is Tom,I am 7 years old
I am a boy,our boys's ages are [7]
from child1
my name is Anna,I am 8 years old
I am a girl,our boys's ages are [8]
my name is jack,I am 9 years old
I am a boy,our boys's ages are [7, 9]

这类装饰器的里面嵌套了2个函数,给需要装饰的函数添加一个分类的功能,确定这些child是男孩还是女孩。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值