zoukankan      html  css  js  c++  java
  • python装饰器

    def home(name):
    print('你又来啦')
    print(name)
    def login(func):
    def inner(name):
    print('pass')
    return func(name)
    return inner
    def login1(a,b):
    def inner(name):

    print('diyipass')
    def wa(*name1):
    a(*name1)
    b(*name1)
    #name(name1)
    return name(*name1)
    return wa
    return inner
    #def login(func):
    # print('pass')
    # return func

    #@login#在不调用任何函数的情况下,这条语句依然会被执行
    #@login
    def DIANNAO(name):
    print('你还来')
    print(name)
    @login1(DIANNAO,home)
    def TV(name):
    print('你来啦')
    return 4

    #@login



    tv=login(TV)#装饰器里面只有一层,直接将功能函数赋给装饰器,
    #让装饰器去执行
    print(tv)
    '''
    传递进去的就是一个内存地址
    '''
    tv('alex')
    p=tv('alex')
    print(p)
    m=login(DIANNAO)
    m('mei')
    o=TV('alex')
    print(o)
    '''
    个人总结,装饰器就是包含,和顺序执行
    有些强大的装饰器框架
    再下次调用的时候只需要写函数就可以啦
    写一个装饰器的成本比较高。
    要调用的时候可以直接调用函数
    '''
    print('邪恶的------')
    t=login1(DIANNAO,home) #返回的inner的内存地址,这个时候没有实例化
    #只是将函数赋给longi1,DIANNAO,home分别表示连个函数
    print(t)#打印出inner函数的内存地址
    p=t(tv)#这个时候也没有进行实例化,将功能函数赋值给装饰器
    print(p)#打印出要执行函数的内存地址
    m=p('alex')#进行实例化
    print('m',m)#打印出返回结果,这个返回结果建议使用
    #return name(*name1),这种模式,这样可以接收功能函数的返回值
    print('你好')
    TV('alex') #直接利用装饰器进行的功能函数的实例化







  • 相关阅读:
    【tarjan】BZOJ 1051:受欢迎的牛
    【递推】BZOJ 1088: [SCOI2005]扫雷Mine
    【计算几何】多边形
    【贪心】Bzoj 2457:[BeiJing2011]双端队列
    【单调栈】Bzoj 1012: 最大数maxnumber
    [洛谷P3584] POI2015 LAS
    [洛谷P4049] JSOI2007 合金
    [51nod1533] 一堆的堆
    [AGC018E] Sightseeing Plan
    [CF1065E] Side Transmutations
  • 原文地址:https://www.cnblogs.com/xwl65/p/5186921.html
Copyright © 2011-2022 走看看