Python知识点

  • 生成器 (generator)

    使用生成器函数或生成器表达式构建的迭代器。无需迭代集合就可能生成值。

    相比于迭代器,生成器适合一些需要处理巨大的数据集合的场景。因为不需要在事先就准备好整个迭代过程中的所有元素。即无序将对象的所有元素都存入内存之后,才开始进行操作。可以有效的节省内存。

    但是由于延迟计算的特点,生成器的时间开销会略高。

  • 生成器函数 (generator function)

    带有yield关键字的函数在Python中被称之为generator function(生成器函数)。

    调用生成器函数得到的是生成器。

    python解释器会将带有yield关键字的函数视为一个generator来处理。 一个函数或者子程序都只能return一次。但是一个生成器能暂停执行并返回一个中间的结果。

    这就是yield语句的功能:返回一个中间值给调用者并暂停执行。

  • 生成器表达式 (generator expression)

    放在括号里的表达式,句法与列表推导一样,不过返回的不是列表,而是生成器。

    生成器表达式可以理解为列表推导的惰性版本。

  • 可迭代的 (iterable)

    使用内置的iter函数可以从中获得迭代器的对象。

    如果对象的__iter__方法能返回迭代器,这就是可迭代的对象。序列都是可迭代的对象。

    此外,实现了__getitem__方法的对象也是可迭代的对象。但下标必须是从0开始访问。

    可迭代对象应该实现__iter__方法,而不实现__next__方法。

  • 迭代器 (iterator)

    实现了无参数方法__next__的对象。这个方法返回级数里的下一个元素。如果没有元素就抛出StopIteration异常。

    所以迭代器只能迭代一次。

    在python中,迭代器还实现了__iter__方法,因此迭代器也是可迭代的对象

    根据最初的设计模式,经典迭代器返回集合里的元素。生成器也是迭代器,不过更灵活。

  • 装饰器

    装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。

  • 描述符

    描述符是实现了特定协议的类,这个协议包括__get__, __set__, __delete__方法。

  • 闭包

      • 闭包指延伸了作用域的函数。其中包含函数定义体中引用,但是不在定义体中定义的非全局变量。

      • 这就是所谓的自由变量, 被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。

      • 函数是不是匿名的没有关系,关键是它能访问定义体之外定义的非全局变量。

    1. 内部函数可以使用外部函数变量的行为,就叫做闭包。
    2. 当函数存在嵌套,并且子函数引用了父函数中的变量,可以访问这些变量的作用域就形成闭包。
    3. 如果子函数没有访问父函数中的变量,就不存在闭包。
  • 元类 (metaclass)

    实例是类的类,默认情况下,Python中的类是type类的实例;例如,type(int)得到的结果是type类。因此type是元类。用户可以通过扩展type类定义元类。

  • 元编程 (metaprogramming)

    编写的程序使用程序运行时的信息改变程序的行为。例如,ORM可能会内省模型类的声明,确定如何验证数据库记录里的字段,以及如何把数据库类型转换成Python类型。

  • 回调函数 (callback function)

    先被传给中间函数再被调用的函数就叫回调函数

    例.
    你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。

    • 起始函数

      起始函数式指中间函数的调用者。

    • 阻塞式回调

      阻塞式回调里,回调函数的调用一定是发生在起始函数返回之前。

    • 延迟式回调

      延迟式回调里,回调函数的调用有可能是在起始函数返回之后。

  • 弱引用

    弱引用是指不能确保其引用的对象不会被垃圾回收器回收的引用。

    一个对象若只被弱引用所引用,则可能在任何时刻被回收。

    弱引用的主要作用就是减少循环引用,减少内存中不必要的对象存在的数量。

    Python在对象的引用计数为0或只存在对象的弱引用时将回收这个对象

  • 猴子补丁 (monkey patching)

    用来在运行时动态修改已有的代码,而不需要修改原始代码。

    通常是添加功能或修正缺陷。

    主要用处有:

    1. 在运行时动态替换方法、属性等

       import json  
       import ujson 
       
       def monkey_patch_json():  
           json.__name__ = 'ujson'  
           json.dumps = ujson.dumps  
           json.loads = ujson.loads  
           
       monkey_patch_json() 
      
    2. 在不修改第三方代码的情况下增加原来不支持的功能

    3. 在运行时为内存中的对象增加patch而不是在磁盘的源代码中增加

    猴子补丁在内存中发挥作用,不会修改源码。因此只对当前运行的程序实例有效。因为猴子补丁破坏了封装,而且容易导致程序与补丁代码的实现细节紧密耦合,所以被视为临时的变通方案。

  • 鸭子类型

    多态的一种形式。

    一个对象有效的语义,不是由继承自特定的类或实现特定的接口, 而是由当前方法和属性的集合决定的。

  • 上下文管理器

    实现了__enter____exit__特殊方法的对象,在with块中使用。

  • 抽象基类 (abstract base class, ABC)

    无法实例化,只能扩展的类。Python通过ABC实现接口。除了继承ABC之外,类还可以注册成为ABC的虚拟子类。声明自己实现了接口。

  • 子程序

  • 协程

    用于并发编程的生成器

    可以暂停执行的函数

  • 语法糖 (syntactical sugar)

    也称为糖衣语法,是一种不影响程序功能, 但可以提升代码可读性的便捷语法。

  • __dict__

    __dict__是用来存储对象属性的一个字典,其键为属性名,值为属性的值

  • LEGB原则

    local (function),本地
    enclosing function local , 闭包
    Global (module), 全局
    Builtion (Python), 模块

  • 延迟绑定

  • GET、POST、PUT的区别

  • Cookie (客户端保持状态)

  • Session (服务端保持状态)

    Session机制可能需要借助Cookie机制来达到保存标识的目的

posted @ 2018-01-14 20:24  暮晨  阅读(153)  评论(0编辑  收藏  举报

Aaron Swartz was and will always be a hero