栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python装饰器实例

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python装饰器实例

python装饰器实例
  • 一 让被装饰函数即有返回值又能带任意个参数的装饰器
    • 1.1 伪代码
    • 1.2 代码
  • 二 让装饰器中的变量能传递给被装饰函数
    • 2.1 伪代码
    • 2.2 代码
  • 三 让装饰器能带参数- @ 装饰器函数(参数) 方法一 :三层装饰器
    • 3.1 伪代码
    • 3.2 代码
  • 四 让装饰器能带参数- @ 装饰器函数(参数) 方法一 :使用两个装饰器
    • 4.1 伪代码
    • 4.2 代码

一 让被装饰函数即有返回值又能带任意个参数的装饰器 1.1 伪代码
def 装饰器函数(func):
    def 真正的被装饰函数(*args,**kwargs):
        前置代码
        ret = func(*args,**kwargs)
        后置代码
        return ret
    return 真正的被装饰函数
1.2 代码
def 装饰器函数(func):
    def 真正的被装饰函数(*args, **kwargs):
        print("前置代码")
        ret = func(*args, **kwargs)
        print(args)
        print(kwargs)
        print("被装饰函数的return是",ret)
        print("后置代码")
    return 真正的被装饰函数

@装饰器函数
def test(aa,bb,cc=33,dd=44):
    print("我是test函数")
    return aa + bb + cc + dd

if __name__ == "__main__":
    test(6,8,9,dd=100)
二 让装饰器中的变量能传递给被装饰函数 2.1 伪代码
def 装饰器函数(func):
    def 真正的被装饰函数(*args,**kwargs):
        前置代码
        x = 1  #要传给被装饰函数的变量
        ret = func(*args,a=x,**kwargs)
        后置代码
    return 真正的被装饰函数

@ 装饰器函数
def test(t1,t2,a):
    print(a) # 使用通过装饰器传来的变量
2.2 代码
def 装饰器函数(func):
    def 真正的被装饰函数(*args,**kwargs):
        print("前置代码")
        x = 1  #要传给被装饰函数的变量
        ret = func(*args, a=x, **kwargs)
        print("后置代码")
        return ret
    return 真正的被装饰函数

@ 装饰器函数
def test(t1,t2, a):
    print(a) # 使用通过装饰器传来的变量

test(1,2)
三 让装饰器能带参数- @ 装饰器函数(参数) 方法一 :三层装饰器 3.1 伪代码 3.2 代码 四 让装饰器能带参数- @ 装饰器函数(参数) 方法一 :使用两个装饰器 4.1 伪代码
def 装饰器函数1(接收由装饰器带来的参数1, 接收由装饰器带来的参数2): # 这两个形参接收装饰器传来的参数
    def wrapper1(func):
        return 装饰器函数2(func=func, 接收由装饰器带来的参数1=接收由装饰器带来的参数1, 接收由装饰器带来的参数2=接收由装饰器带来的参数2)
    return wrapper1

def 装饰器函数2(func,**kwargs):
    def 真正的被装饰函数(*args):
        前置代码
        ret = func(*args)
        print("由装饰器传入的参数是:",kwargs.get('接收由装饰器带来的参数1'))
        print("由装饰器传入的参数是:",kwargs.get('接收由装饰器带来的参数2'))
        后置代码
    return 真正的被装饰函数

@装饰器函数1("abc",666)  # 将"abc"和666分别作为两个参数传出来
def test(aa,bb,cc=33,dd=44):
    return aa + bb + cc + dd
4.2 代码
def 装饰器函数1(flag1,flag2): # flag1和flag2是接收装饰器传来的参数
    def wrapper1(func):
        return 装饰器函数2(func=func, flag1=flag1,flag2=flag2)
    return wrapper1

def 装饰器函数2(func,**kwargs):
    def 真正的被装饰函数(*args):
        print("前置代码")
        ret = func(*args)
        print("由装饰器传入的参数flag1是:",kwargs.get('flag1'))
        print("由装饰器传入的参数flag2是:",kwargs.get('flag2'))
        print("被装饰函数的return是",ret)
        print("后置代码")
    return 真正的被装饰函数

@装饰器函数1("abc",666)  # 将"abc"和666分别作为两个参数传给flag1和flag2
def test(aa,bb,cc=33,dd=44):
    print("我是test函数")
    print("test函数的aa=",aa)
    print("test函数的bb=",bb)
    print("test函数的cc=",cc)
    print("test函数的dd=",dd)
    return aa + bb + cc + dd

if __name__ == "__main__":
    test(6,8,9)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1002442.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号