python 装饰器

python装饰器是干嘛的  就是现在又一个函数方法 不想改动他本身的代码  又想给他增加新的功能  就是装饰器   这样说比较笼统 大概就是这个意思 

先来看代码 

def w1(func):
    def inner():
        print("---新增功能----")
        func()
    return inner
@w1
def f1():
    print("---原有功能---")
f1()

f1本来功能只有一行的代码输出   w1就是装饰器   在f1前面加上@w1  就相当于给f1增加了装饰器  这样f1 就新增了w1的功能

这是最基础的装饰器 

多个装饰器   

    需要新增的功能 太多了 一个装饰器搞不定 这么办    我们同样可以用多个装饰器 

 

看代码 

def makeBold(func):
    def inner():
        print("----新增功能1---")
        func()
    return inner

def makeItalic(func):
    def wrapped():
        print("----新增功能2---")
        func()
    return wrapped


@makeBold
@makeItalic
def test():
    print("----基础的原有功能---")
    
test()

两个装饰器  makeBold  makeItalic  都对原有的test的功能进行了新增

现在有人说了 我原有的是带有参数的 希望对参数进行处理的  这么办    看代码 

def func(functionName):
    def func_in(a, b):
        a=a+b
        functionName(a, b)

    return func_in

@func
def test(a, b):
    print("a====%d,b=%d===" % (a, b))
test(11, 22)

我们原有的函数 带有a和b两个参数    装饰器的内部函数 func_in(a,b) 来接受了两个参数 并且进行处理   然后又给了原有的函数  进行了装饰  在不改动原先代码的情况下  改变了a的值   最后结果  33 22

又有新需求  参数是不固定的   装饰器可以吗   看代码 

def func(functionName):
    def func_in(*args, **kwargs):#采用不定长参数的方式满足所有函数需要参数以及不需要参数的情况
        functionName(*args, **kwargs)#这个地方,需要写*以及**,如果不写的话,那么args是元祖,而kwargs是字典
    return func_in

@func
def test(a, b, c):
    print("----test-a=%d,b=%d,c=%d---"%(a,b,c))

@func
def test2(a, b, c, d):
    print("----test-a=%d,b=%d,c=%d,d=%d---"%(a,b,c,d))

test(11,22,33)

test2(44,55,66,77)

 不做过多解析  看不懂得话 请出门左转

 

我想给我得装饰器带参数 行不行 肯定行呀 上代码 

def func_arg(arg):
    def func(functionName):
        def func_in():
            print("---装饰器参数arg=%s--"%arg)
            if arg=="heihei":
                functionName()
                functionName()
            else:
                functionName()
        return func_in
    return func


@func_arg("heihei")
def test():
    print("--test--")


@func_arg("haha")
def test2():
    print("--test2--")

test()
test2()

大功告成  python装饰器学完了 

我这里又python全套教学视频  免费领   直接评论就可以了  

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值