python语言特性
python是静态还是动态类型?是强类型还是弱类型?
- 动态强类型语言
- 动态还是静态指的是编译期还是运行期确定类型
- 强类型指的是不会发生隐式类型转换
python作为后端语言优缺点
为什么要用python
- 胶水语言,轮子多,应用广泛
- 语言灵活,生产力高
- 性能问题、代码维护问题、python2/3兼容问题
什么是鸭子类型
- 关注点在对象行为,而不是类型
- 比如file, StringIO,socket对象都支持read/write方法(file like object)
- 再比如定义了iter魔术方法的对象可以用for迭代
鸭子类型更关注接口而非类型
什么是monkey patch
什么是monkey patch? 那些地方用到了?自己如何实现?
- 所谓的monkey patch就是运行时替换
- 比如gevent库需要修改内置的socket
- from gevent import monkey; monkey.patch_socket()
什么是自省?
introspection
- 运行时判断一个对象的类型的能力
- python 一切皆对象,用type, id, isinstance获取对象类型信息
- inspect模块提供了更多获取对象信息的函数
什么时列表和字典推导
- 比如返回列表
[i for i in range(10) if i % 2 == 0]
-
一种快速生成list/dict/set的方式。用来替代map/filter等
-
返回生成器
(i for i in range(10) if i % 2 == 0)
python之禅
- Tim Peters 编写的关于python编程准则
- import this看到
- 编程拿不准的时候可以参考
python2/3差异常考题
python改进
- print成为函数
- 编码问题。python3不再有Unicode对象,默认str就是unicode
- 除法变化。python3除号返回浮点数
python3改进
- 类型注解(type hint)。帮助IDE实现类型检查
- 优化的super()方便直接调用父类函数
- 高级解包操作。a,b,*rest = range(10)
python3改进
- 限定关键词参数
def add(a,b, *, c):
return a+b+c
add(1,2, c=3)# c=3必须这么写
- python3重新抛出异常不会丢失栈信息
raise from OSError - 一切返回迭代器 range,zip,map,dict,values,etc都是迭代器(节省内存)
python3新增
- yield from 链接子生成器
- asyncio内置库, async/await原生协程支持异步编程
- 新的内置库enum, mock, asyncio, ipaddress, concurrent.futures等
- 生成的pyc文件统一放到pycache
- 一些内置库的修改, urllib,selector等
- 性能优化
兼容python2/3工具
- six模块
- 2to3等工具转换代码
- future
网友评论