美文网首页
闭包及装饰器

闭包及装饰器

作者: 木子李007 | 来源:发表于2020-10-29 15:52 被阅读0次

    递归:是自己调用自己
    闭包:函数嵌套,并且保存局部作用域变量

    ## 普通装饰器
    def wai(func):
        def nei():
            res = func()
            return res + '你好'
        return nei
    
    @wai
    def work():
        return '123'
    
    def func():
        return 123
    print(work())  # 结果是:123你好
    print(func())  # 结果是:123
    
    ## 被装饰函数带参数
    def wai(func): #装饰器
        def nei(var1,var2):
            var1 = 100  #在闭包函数内部对被装饰函数参数进行干预
            var2 = 99
            return func(var1,var2)
        return nei
    
    @wai
    def work(a,b):
        return a + b
    res = work(20,30)  #wai(work)(a,b)
    print(res)   # 结果是:199 
    
    ## 装饰器函数也可以有参数
    #商品
    mind = True
    zhekou = 0.9 #折扣的数值
    youhuiquan = 5
    # 当你的装饰器函数也需要参数的时候,只需要多一层包装即可
    def dazhe(con,zk,yhq):
       def wai(func):
           def nei(money):
               print('-----------')
               if con:
                   print('打折!')
                   money = money * zk
               elif yhq:
                   print("优惠券!")
                   money = money - yhq
               return func(money)
           return nei
       return wai
    #dazhe -> wai
    #wai -> nei
    #nei -> func()
    @dazhe(mind,zhekou,youhuiquan)
    def apple(money):
       print('苹果的价钱是:%d' % money)
       return money
    
    @dazhe(mind,zhekou,youhuiquan)
    def pants(money):
       print('裤子的价钱是:%d' % money)
       return money
    
    @dazhe(mind,zhekou,youhuiquan)
    def skirt(money):
       print('裙子的价钱是:%d' % money)
       return money
    
    apple(10)
    pants(50)
    skirt(100)
    运行结果:======
    -----------
    打折!
    苹果的价钱是:9
    -----------
    打折!
    裤子的价钱是:45
    -----------
    打折!
    裙子的价钱是:90
    
    ## 思考
    def work():
        return '123'
    def func():
        work() #== '123'
    
    print(func()) #问题:返回值是啥?
    #答案:None
    
    def wai(b_func): #外函数的参数是一个函数对象
        def nei():
            print("嘿嘿嘿") #在nei函数里写的代码基本上都是添加的功能
            return b_func() #这个是nei函数返回值,用来返回之前在wai函数所接收的参数
            #b_func()
            #return ''
        return nei #返回了wai函数里的这个定义好的闭包容器
    
    @wai #语法糖
    def func():
        print('哈哈哈哈')
        return 'func'
    
    res = func() #调用一个被装饰函数 其实相等于 wai(func)()
    print('func的返回值:',res)
    

    相关文章

      网友评论

          本文标题:闭包及装饰器

          本文链接:https://www.haomeiwen.com/subject/fbxzmktx.html