python学习笔记--函数装饰器

python基础学习笔记 函数装饰器

python函数–装饰器

装饰器:给原本的函数一个额外的功能 ,不要改变内部

1.开放封闭原则:
a.已经写好的代码,尽可能不要修改
b.如果想要新增功能,在原先代码基础上,单独进行扩展

2.单一职责:一个函数尽可能实现单一功能,不要增加额外功能

3.语法糖 装饰器写法: 在函数定义前,写一个@…

例子:

对不带参数的函数进行装饰

# 给某一函数增加一些额外的功能
# 1.函数名字不能发生改变
# 2.函数体内部代码不能发生改变

def check(func):
    #装饰器里面要有一个闭包函数
    def inner():
        print("登录验证操作....")
        func()

    return inner


@check      # fss = check(fss)
def fss():
    print("发说说..")


fss()

运行结果:

登录验证操作....
发说说..

对带有参数的函数进行装饰(写成不定长参数形式)

# 对带有参数的函数进行装饰
def zsq(func):
    def inner(*args, **kwargs):
        # args是元组,kwargs是字典
        print("-" * 30)
        func(*args, **kwargs) # 怎么装包的,就怎么拆包
    return inner


@zsq
def pnum(num, num2, num3):
    print(num, num2, num3)


@zsq
def pnum2(num):
    print(num)


pnum(123, 222, num3=666)
pnum2(999)

运行结果:

------------------------------
123 222 666
------------------------------
999

对带有返回值额函数进行装饰

# 对带有返回值的函数进行装饰
# 要点:保证被装饰的函数的格式和装饰器内包的格式一致

def zsq(func):
    def inner(*args, **kwargs):
        # args是元组,kwargs是字典
        print("-" * 30)
        res = func(*args, **kwargs)  # 怎么装包的,就怎么拆包
        return res

    return inner


@zsq
def pnum(num, num2, num3):
    print(num, num2, num3)
    return num + num2 + num3


@zsq
def pnum2(num):
    print(num)


res1 = pnum(123, 222, num3=666)
res2 = pnum2(999)

print(res1, res2)

结果:

------------------------------
123 222 666
------------------------------
999
1011 None

带有参数的装饰器

# 带有参数的装饰器

def getzsq(char):
    
    def zsq(func):
        def inner(*args, **kwargs):
            print(char * 30)
            res = func(*args, **kwargs)  # 怎么装包的,就怎么拆包
            return res

        return inner

    return zsq


@getzsq("-")
def f1():
    print("666")


f1()

运行结果:

------------------------------
666
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值