美文网首页
Python_闭包、装饰器

Python_闭包、装饰器

作者: 等哈光圈 | 来源:发表于2018-01-04 22:14 被阅读0次

闭包

  • 内部函数调用外部函数的变量(一个闭包就是你调用的一个函数A,这个函数A返回一个函数B给你。这个返回的函数B就叫做闭包)

  • 优点:可以提高代码的可复用性,减少了代码的可移植性

  • 特点:一个独立的空间,多个闭包互补影响,占用空间远小于实例对象;

  • 注意点:引用了外部函数的局部变量,则外部函数的局部变量没有及时释放,消耗内存

  • nonlocal 修改一个函数内部变量时使用

# 定义一个函数
def test(number):
        
        # 在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数及用到的一些变量称之为闭包
        def test_in(number_in):
                print("in text_in 函数, number_in is %d" % number_in)
                return number + number_in
        # 其实这里返回的就是闭包的结果
        return text_in
# 给test函数赋值,这个20就是给参数number
ret = test(20)
# 注意这里的100其实给参数的number_in
print(ret(100))
# 注意这里的200其实给参数number_in
print(ret(200))

运行结果:
in test_in 函数, number_in is 100
120
in test_in 函数, number_in is 200
220

装饰器

  • 定义一个函数,在运行时动态增加功能

  • 在不修改原函数的代码的情况下,添加新的功能,可以在执行原函数之前加,也可以在执行原函数之后添加

  • 注意点:

    • 装饰器只能在调用原函数之前或之后添加功能,而不能在函数的中间添加功能
    • 只要用装饰器装饰了的函数,那么不管被调用多少次,都是装饰之后的效果
  • 装饰器(decorator)功能
    1.引入日志
    2.函数执行时间统计
    3.执行函数前预备处理
    4.执行函数后清理功能
    5.权限校验等场景
    6.缓存

#### 第一波 ####
def foo()
       print("foo")
foo # 表示是函数
foo() # 表示执行foo函数
#### 第二波 ####
def foo()
       print("foo")

foo = lambda x: x + 1
foo() # 执行lambda表达式, 而不再是原来的foo函数, 因为foo这个名字被重新指向另外一个匿名函数
  • 写代码要遵循开放封闭原则,它规定已经实现的功能代码不允许被修改,但可以被扩展
    - 封闭:对实现功能的代码块
    - 开放:扩展开发

  • 一般情况下为了让装饰器更通用,可以有return

  • 装饰的时候:谁离被装饰的函数越近,那么就先装谁

  • 调用的时候:谁离的远,那么先调谁

相关文章

  • Python_闭包、装饰器

    闭包 内部函数调用外部函数的变量(一个闭包就是你调用的一个函数A,这个函数A返回一个函数B给你。这个返回的函数B就...

  • python 高级 13闭包 装饰器

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

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

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

  • Python装饰器-专题笔记

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

  • Python-闭包和修饰器

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

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

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

  • 装饰器

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

  • Python装饰器——初识

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

  • chapter7 函数式编程

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

  • python装饰器

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

网友评论

      本文标题:Python_闭包、装饰器

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