51. 使用**而不是pow

%timeit -n 10000 c = pow(2,20)
%timeit -n 10000 c = 2**20
10000 loops, best of 3: 284 ns per loop
10000 loops, best of 3: 16.9 ns per loop

52. 使用 cProfile, cStringIO 和 cPickle等用c实现相同功能(分别对应profile, StringIO, pickle)的包

import cPickle
import pickle
a = range(10000)
%timeit -n 100 x = cPickle.dumps(a)
%timeit -n 100 x = pickle.dumps(a)
100 loops, best of 3: 1.58 ms per loop
100 loops, best of 3: 17 ms per loop

由c实现的包,速度快10倍以上!

53. 使用最佳的反序列化方式

下面比较了eval, cPickle, json方式三种对相应字符串反序列化的效率,可见json比cPickle快近3倍,比eval快20多倍。

import json
import cPickle
a = range(10000)
s1 = str(a)
s2 = cPickle.dumps(a)
s3 = json.dumps(a)
%timeit -n 100 x = eval(s1)
%timeit -n 100 x = cPickle.loads(s2)
%timeit -n 100 x = json.loads(s3)
100 loops, best of 3: 16.8 ms per loop
100 loops, best of 3: 2.02 ms per loop
100 loops, best of 3: 798 µs per loop

54. 怎么才算精通python

  • 熟悉语法以及原声数据结构
  • 熟悉基本实现中的性能特点,就是知道什么操作会慢
  • 会使用profile以及基于profile的性能分析工具
  • 会使用运行时编译和静态编译的工具。pypy,numba,cython,ctypes,original C/C++ extension
  • 熟悉你所在领域的拓展库,比如我,科学计算方面的库不要太多,numpy衍生出来的一大堆大堆
  • 了解基本的编译过程,基本的操作系统知识(只要你C、C++学的还行就可以了)
  • 要想精通python,写的代码首先得pythonic
  • 研读牛B的开源代码,在这过程中会遇到python的许多高阶用法
  • 理解装饰器,生成器,描述符,元类
  • 掌握list comprehension,
  • 多用内置函数:map,reduce,filter,iter,range,divmod,round,chr,enumerate,all,any,slice,zip+

55. python 猴子补丁相关

python里有一个很奇妙的monkey patch,中文叫做猴子补丁,是指的是在运行时动态替换某些已加载的模块的实现。第一次了解这个概念是在使用gevent的时候,需要把python自带的socket,os等相关模块的实现改变成异步形式,但同时不改动python的源代码。

56. python 中时间格式转换



python汉化补丁 python中文补丁_python汉化补丁

57. python 一行代码启动 http 服务器

python -mSimpleHTTPServer

End. 作者:地球的外星人君