美文网首页
闭包及装饰器

闭包及装饰器

作者: 木子李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)

相关文章

  • Python装饰器-专题笔记

    学会装饰器,Python更进阶 函数作用域到闭包到装饰器讲解,及闭包和装饰器的运用。 [√] 慕课网Meshare...

  • 闭包及装饰器

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

  • python 高级 13闭包 装饰器

    闭包和装饰器 1.8 闭包和装饰器 学习目标 1. 能够说出闭包的定义形式 2. 能够说出装饰器的实现形式 ...

  • Python的自定义超时机制——装饰器的妙用

    装饰器 关于装饰器的入门,可以参考这篇文章:12步轻松搞定python装饰器简单来说,装饰器其实就是一个闭包(闭包...

  • Python-闭包和修饰器

    作用域 闭包 code: 装饰器 code: 装饰器案例 code:

  • Python 2 - 高级用法 - 装饰器

    Python 2 - 高级用法 - 装饰器 一谈到 装饰器,就离不开闭包 闭包 闭包就是能够读取其他函数内部变量的...

  • 装饰器

    1.装饰器的概念 装饰器是一个闭包:内层函数引用外层函数的变量(参数也算变量),然后返回内层函数,就是闭包。装饰器...

  • Python装饰器——初识

    上次讲了Python的闭包,今天来讲一下闭包的应用——装饰器 1. 装饰器是什么 什么叫装饰器?顾名思义,它是一个...

  • chapter7 函数式编程

    闭包 匿名函数 装饰器 偏函数

  • python装饰器

    学习了闭包的概念之后,再来学习装饰器就简单很多。装饰器就是闭包的一个应用 代码举例 但是装饰器在使用时分加载态和调...

网友评论

      本文标题:闭包及装饰器

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