zoukankan      html  css  js  c++  java
  • 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个参数

  • 相关阅读:
    POJ2184 01背包变形 xingxing在努力
    HDU2955 01背包变体 xingxing在努力
    Uva624 01背包输出方案 xingxing在努力
    HDU2602 01背包 xingxing在努力
    Jersey初谈
    Jersey初谈
    Oracle基本语句
    Oracle基本语句
    2013下半年工作总结
    2013下半年工作总结
  • 原文地址:https://www.cnblogs.com/duanlinxiao/p/9820739.html
Copyright © 2011-2022 走看看