改善python程序的91个建议读书笔记(4)

本文介绍了Python编程中的几个实用技巧,包括如何利用lazyevaluation提高程序效率,枚举类型的正确使用方式,以及为何不推荐使用type函数进行类型检查等。

建议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))支持多种类型列表
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值