• Python—装饰器


    Python—装饰器

    装饰器
    1.普通函数

    #简单的函数和调用
    def a1():
    print("i am zhangsan")
    def a2():
    print("i am lisi")
    a1()
    a2()

    2.在函数前后添加功能

    def inner(func):
    print("添加1")
    func()
    print("添加2")
    return func
    def a1():
    print("i am zhangsan")
    def a2():
    print("i am zhangsan")

    a1=inner(a1)
    a1()
    a2=inner(a2)
    a2()

    3.使用装饰器

    def mywork(func):
    def inner():
    print("添加1")
    func()
    print("添加2")
    return inner
    @mywork # @mywork就等于a1=mywork(a1)
    def a1():
    print("i am zhangsan")

    a1()
    #执行时@mywork会把他下面的函数当成mywork函数的参数既mywork(a1),然后在函数inner里执行,inner内func()=a1()

    4.装饰带参数的函数

    def mywork(func):
    def inner(arg):
    print("添加1")
    func(arg)
    print("添加2")
    return inner
    @mywork
    def a1(arg):
    print 'i am zhangsan',arg

    a1("参数1")

    5.装饰动态参数的函数

    #合并无参,有参,多参 可以装饰含有N个参数的函数
    def mywork(func):
    def inner(*args,**kwargs):
    print("添加1")
    func(*args,**kwargs)
    print("添加2")
    return inner
    @mywork
    def a1():
    print 'i am zhangsan'
    @mywork
    def a2(arg):
    print 'i am zhangsan',arg
    @mywork
    def a3(arg1,arg2):
    print 'i am zhangsan',arg1,arg2
    a1()
    a2("参数1")
    a3("参数1","参数2")

    6.装饰含有返回值的函数

    #装饰含有返回值的函数
    def mywork(func):
    def inner(*args,**kwargs):
    print("添加1")
    aa=func(*args,**kwargs)
    print("添加2")
    return aa
    return inner
    @mywork
    def a3(arg1,arg2):
    print 'i am zhangsan',arg1,arg2
    li=[1,2,3,4,5,6]
    return li #返回一个列表

    list=a3("参数1","参数2") #list等于inner的返回值
    print(list)
    #li列表是a3的返回值,所以给在inner函数里执行的func()赋给aa,在通过inner的返回值就能拿到列表

    7.装饰器实现登录验证简单原理
    View Code
    8.多个装饰器装饰一个函数
    View Code
    9.装饰器加参数

    #3层装饰器
    def Filter(a1,a2):
    def outer(func):
    def wrapper(request,kargs):
    print(a1)
    result=func(request,kargs)
    print(a2)
    return result
    return wrapper
    return outer
    aa=11
    bb=22
    @Filter(aa,bb)
    def Index(request,kargs):
    print request,kargs

    Index("zhangsan","lisi")
    #@Filter(aa,bb)会先执行Filter(aa,bb)函数,获取到返回值outer后拼接成@outer,之后就变成普通的装饰器了
    #wrapper函数内可以使用a1,a2,request,kargs 4个参数

  • 相关阅读:
    ADERA3 省选模拟赛 SPOJ LMCONST
    TYVJ 1730 二逼平衡树 线段树套平衡树
    BZOJ 1059 [ZJOI2007]矩阵游戏 二分图匹配
    BZOJ 1056 [HAOI2008]排名系统 Splay+Hash
    OI教会我的
    BZOJ 1055 [HAOI2008]玩具取名 DP
    BZOJ 1058 [ZJOI2007]报表统计 Splay
    为自己而奋斗
    [总结]高斯消元&XOR方程
    我 的 2013
  • 原文地址:https://www.cnblogs.com/duanlinxiao/p/9820739.html
Copyright © 2020-2023  润新知