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__
方法。 -
闭包
-
-
闭包指延伸了作用域的函数。其中包含函数定义体中引用,但是不在定义体中定义的非全局变量。
-
这就是所谓的自由变量, 被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。
-
函数是不是匿名的没有关系,关键是它能访问定义体之外定义的非全局变量。
-
- 内部函数可以使用外部函数变量的行为,就叫做闭包。
- 当函数存在嵌套,并且子函数引用了父函数中的变量,可以访问这些变量的作用域就形成闭包。
- 如果子函数没有访问父函数中的变量,就不存在闭包。
-
-
元类 (metaclass)
实例是类的类,默认情况下,Python中的类是type类的实例;例如,type(int)得到的结果是type类。因此type是元类。用户可以通过扩展type类定义元类。
-
元编程 (metaprogramming)
编写的程序使用程序运行时的信息改变程序的行为。例如,ORM可能会内省模型类的声明,确定如何验证数据库记录里的字段,以及如何把数据库类型转换成Python类型。
-
回调函数 (callback function)
先被传给中间函数再被调用的函数就叫回调函数
例.
你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。-
起始函数
起始函数式指中间函数的调用者。
-
阻塞式回调
阻塞式回调里,回调函数的调用一定是发生在起始函数返回之前。
-
延迟式回调
延迟式回调里,回调函数的调用有可能是在起始函数返回之后。
-
-
弱引用
弱引用是指不能确保其引用的对象不会被垃圾回收器回收的引用。
一个对象若只被弱引用所引用,则可能在任何时刻被回收。
弱引用的主要作用就是减少循环引用,减少内存中不必要的对象存在的数量。
Python在对象的引用计数为0或只存在对象的弱引用时将回收这个对象
-
猴子补丁 (monkey patching)
用来在运行时动态修改已有的代码,而不需要修改原始代码。
通常是添加功能或修正缺陷。
主要用处有:
-
在运行时动态替换方法、属性等
import json import ujson def monkey_patch_json(): json.__name__ = 'ujson' json.dumps = ujson.dumps json.loads = ujson.loads monkey_patch_json()
-
在不修改第三方代码的情况下增加原来不支持的功能
-
在运行时为内存中的对象增加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机制来达到保存标识的目的