什么是鸭子类型?
当看到一只鸟,走起来像鸭子、游泳起来像鸭子、叫起来像鸭子那么这只鸟就能够被称之为鸭子python
关注点在对象的行为,而不是类型(duck typing)编程
好比 file, StringIO, socket 对象都支持read/write方法(file like object)微信
好比定义了 _ iter _ 魔术方法的对象能够使用forapp
鸭子类型更关注接口而非类型。异步
什么是monkey patch ?那些地方用到了?本身如何实现?
所谓猴子补丁就是运行时替换socket
gevent库须要修改内置的socketasync
from gevent import monkey;monkey.patch_socket()
异步编程
本身实现猴子补丁:函数
import time
print(time.time())
def _time():
return 1234
time.time = _time
print(time.time)
什么是自省?
运行时判断一个对象的类型能力工具
Python一切皆对象,用type, id, isinstance 获取对象类型信息
Inspect 模块提供了更多获取对象信息的函数
什么是列表或字典推导?
相似:
[i for i in range(10) if i % 2 == 0]
一种快速生成list/dict/set的方法,用来替代 map/filter
python<br />a = [1,2,3]<br />b = ['a','b','c']<br />d = {k:v for k,v in zip(b,a)}<br />print(d)<br />
返回生成器:
(i for i in range(10) if i % 2 == 0)
Python2/3的差别点
print 成为函数
编码问题,Python3再也不有Unicode对象,默认str就是Unicode
Unicode(给人看的) -> encode -> 字节串(给计算机看的)
传输的时候使用字节串,操做的时候使用UnicodePython3除法返回浮点数
类型注解
def hello(name: str) -> str:
return 'hello' + name优化的super()方便调用父类函数
高级解包操做:
a, b, *res = range(10)
限定关键词参数
Python3从新抛出异常不会丢失栈信息(raise from)
一切返回迭代器:range, zip, map, dict.values
yield form 连接子生成器
asyncio内置库,asyn/await 原生协程支持异步编程
兼容Python2/3的工具
six 模块
2to3等工具转换代码
_ future _
本文分享自微信公众号 - 咸鱼学Python(xianyuxuepython)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。