建议10:充分利用lazy evaluation的特性
lazy evaluation常被译为”延迟计算”或”惰性计算”,指的是仅仅在真正需要执行的时候才计算表达式的值.好处有两点:
1.避免不必要的计算,带来性能上的提升.
if x or y
当 x的值为true的时候就会直接返回,不再计算y的值.
from time import time
t = time()
abbreviations = ["cf.","e.g.","ex.","etc.","flg.","i.e.","Mr.","vs."]
for i in xrange(100000):
for w in ("Mr.","Hat","is","chasing","the","black","cat","."):
if w in abbreviations:
#if w[-1] == "." and w in abbreviations:
pass
print "total run time:"
print time()-t
如果使用注释行替代第一个if,运行的时间大概会节约10%,因此在编程的过程中,如果对于or条件表达式,应该将值为真可能性较高的变量写在or的前面,而and则应该推后.
2) 节省空间,使得无限循环的数据结构成为可能.
def fib():
a,b = 0,1
while True:
yield a
a,b = b,a+b
from itertools import islice
print list(islice(fib(),5))
建议11.理解枚举替代实现的缺陷
实际上,python2.7以后的版本还有另外一种替代方法.
使用第三方模块flufl.enum.它包含两种枚举类,一种是Enum,只要保证枚举值唯一即可,对值的类型没限制,还有一种是IntEnum,其枚举值为int型.
from flufl.enum import Enum
class Seasons(Enum):
Spring = "Spring"
Summer = 2
Autumn = 3
Winner = 4
Seasons = Enum("Seasons',"Spring Summer Autumn Winner")
flufl.enum提供了members属性,可以对枚举名称进行迭代.
for member in Seasons.members:
print member
print Seasons.Summer.value
建议12:不推荐使用type来进行类型检查
基于内建类型扩展的用户自定义类型,type函数并不能准确返回结果.
在古典类中,任意类的实例的type()返回结果都是
isinstance(object,classinfo)
isinstance(2,float)
isinstance("a",(str,unicode))
isinstance((2,3),(str,list,tuple))支持多种类型列表
本文介绍了Python编程中的几个实用技巧,包括如何利用lazyevaluation提高程序效率,枚举类型的正确使用方式,以及为何不推荐使用type函数进行类型检查等。
400

被折叠的 条评论
为什么被折叠?



