Python复习--装饰器有参无参

一.两个装饰器

def w1(func):
    print("---正在装饰1----")
    def inner():
        print("---正在验证权限1---")
        func()
    return inner

def w2(func):
    print("---正在装饰2---")
    def inner():
        print("---正在验证权限2---")
        func()
    return inner

@w1 #装饰器是对函数进行装饰,若下面不是函数,会暂停,让下面的执行,再来看看是否是函数.w1对下面的装饰过的f1装饰
@w2 #先是W2对f1进行装饰,即执行f1=w2(f1),返回f1这个函数
def f1():
    print("----f1----")
f1() #装饰和调用是分开的
		# 调用的时候还是从上到下,先调用w1,再是w2,之后执行被装饰函数
		
---正在装饰2---
---正在装饰1----
---正在验证权限1---
---正在验证权限2---
----f1----

装饰有参数的函数

def func(funcName):
    print("--func--")
    def func_in(*args, **kwargs): # 这里传参数对应着调用时候f1(1, 2)
        print("---func_in---")
        funcName(*args, **kwargs) # 这里传参数对应这原函数定义就有(a,b)
    return func_in

@func
def f1(a, b):
    print("---test---")
    print("---test---a%d,b=%d"%(a,b))
# f1 = func(f1)
@func
def f2(a, b, c):
    print("--test--a=%d,b=%d,c=%d"%(a,b,c))
f1(1, 2)
f2(1, 2, 3)

--func--
--func--
---func_in---
---test---
---test---a1,b=2
---func_in---
--test--a=1,b=2,c=3

对有返回值的函数进行装饰

def func(funcName):
    print("--func--")
    def func_in(*args, **kwargs):
        print("---func_in---")
        ret = funcName(*args, **kwargs) #原来定义的函数有返回值,所以这里也有返回值
        return ret   #实际下面调用是掉func_in这个函数,所以要想有返回值的返回
    return func_in

@func
def f1(a, b):
    print("---test---")
    print("---test---a%d,b=%d"%(a,b))
    return "hah" #有返回值
# f1 = func(f1)
ret = f1(1, 2)
print(ret)

--func--
---func_in---
---test---
---test---a1,b=2
hah
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值