
Python预算效率低的原因
- 弱类型 变量所指向对象的类型在运行时才确定,编译器无法优化。
- 一切都是对象 每个对象都需要维护引用计数,增加额外工作。
- 属性查找 访问对象的某个属性是非常复杂的过程。python属性查找
-
解释进行 不支持 JIT(just in time compiler)
- GIL 默认CPython执行环境下的Global Interpreter Lock GIL详解
- 垃圾回收 每次垃圾回收的时候都会中断正在执行的程序。
优化的方法一般是基于profile,见 Python性能优化-Profile。
但作为Python开发者应该用Pythonic(Python推荐的惯用法)以优化代码。
Pythonic 推荐惯用法
Pythonic 就是以清晰、可读的惯用法应用Python 理念和数据结构。
- 类Switch语法-dict实现
# 非Pythonic
if a == v1:
return r1
elif a == v2:
return r2
elif a == v3:
return r3
else
return default
# Pythonic
return {v1: r1, v2: r2, v3: r3}.get(a, default)
- 字符格式化
print 'Hello {name}, your age is {age} !'.format(name = 'Franchen', age = '18')
- 遍历List或Set
for item in v_list:
pass
for item in v_set1:
pass
- 两变量值交换
a, b = b, a
- 判断变量在两值之间
1 < a < 10
- 判断是否同一对象,用is
if o1 is o2:
pass
- 判断一个对象是否在集合中,使用set而非list
if val in set(v_list):
pass
- for else 和 while else语句判断是否命中
eg:
for i in range(10):
if f(i) == g(i):
print 'When i is {v}, f(i) == g(i)'.format(v = i)
break
else:
print 'f(i) != g(i)'
- 文件处理
with open(file, mode) as f:
pass
- 大量字符的累加,使用join操作
''.join(str_list) # 相当 str1 + str2 + str3 ...
','.join(str_list) # 相当 str1 + ',' + str2 + ',' + str3 ...
待续
网友评论