• 装饰器


    不改变原来代码和调用方式的情况下,为被装饰对象添加新的功能

    能够在不修改原函数代码的基础上,在执行前后进行定制操作,闭包函数的一种应用

    场景:

    # 闭包函数就是内部的函数调用外部函数的变量,常用于装饰器。定义在函数内部引用了外部函数名称空间中的名字的函数。执行过程中获取到相应的数据,避免了外部干扰。

    # 判断闭包函数的方法:__closure__,输出的__closure__有cell元素说明是闭包函数

    # 闭包的意义与应用:延迟计算:

    # 手写装饰器;

    import functools

    def wrapper(func):

       @functools.wraps(func)  #不改变原函数属性

       def inner(*args, **kwargs):

          执行函数前

          return func(*args, **kwargs)

          执行函数后

       return inner

    1. 执行wapper函数,并将被装饰的函数当做参数。 wapper(index)

    2. 将第一步的返回值,重新赋值给  新index =  wapper(老index)

    @wrapper    #index=wrapper(index)

    def index(x):

       return x+100

    # ---------------------------------------------------------------

    # 生成器:

    一个函数内部存在yield关键字

    应用场景:

       - rang/xrange

       - redis获取值

          - conn = Redis(......)

            - v=conn.hscan_iter() # 内部通过yield 来返回值

        - stark组件中

            - 前端调用后端的yield

    # ---------------------------------------------------------------

    # 迭代器:

    内部有__next__和__iter__方法的对象,帮助我们向后一个一个取值,迭代器不一定是生成器

    应用场景:

       - wtforms里面对form对象进行循环时,显示form中包含的所有字段

       - 列表、字典、元组

       (可以让一个对象被for循环):

  • 相关阅读:
    CC2540-BLE4.0 学历笔记1之串口体验
    cc2530的PWM实现
    用qt写的一个简单到不能在简单的上位机
    在Kubuntu14.04中安装小企鹅输入法
    初始化umi项目
    工具杂记(三) -- zookeeper
    工具杂记(二) -- Centos7
    工具杂记(一) -- vagrant
    (一)Docker导学
    JVM随笔(二)之搜索类
  • 原文地址:https://www.cnblogs.com/heruxiu/p/13495505.html
Copyright © 2020-2023  润新知