Python 踩坑记录

1.浮点数判断:工作中遇到类似下面逻辑判断

i = 1
while i!= 1.5:
    i = i+0.1
    print i
在想象中i应该停止在1.5就不输出了,但是实际的输出结果是无限循环。
这是因为在计算机的逻辑中,浮点数的存储规则决定了不是所有的浮点数都能准确表示,有些是不准确的,只是无限接近。如0.1转换为二进制表示形式为0.0001100110011.....后面1001无限循环。在内存中根据浮点数位数规定,多余部分直接被截断,因此当循环到第5此的时候i的实际值为1.5000000000000004,表达式i!=1.5为True,循环永远执行下去。
解决方法:浮点数的比较最好能够指明精度,或者使用Decomal来处理。
#限制精度 处理浮点数判断
i = 1.0
while i- 1.5<0:
    i = i+0.1
    print i

2.None值判断

a = [1,2,3]
c = list()
if a is not None and c is not None:
    print a,c

输出结果为:[1,2,3][]
常量None的特殊性体现在它既不是0、False、空的列表、字典。其数据类型为NoneType,遵循单例模式,是唯一的,一次不能创建None对象。所有赋值为None的变量都相等,并且None与任何其他非None的对象比较结果都为False。
如需判断某个列表为空怎么办?
解决方案:

a = [1,2,3]
c = list()
if a and c :
    print a,c
eles:
    print "有值为空"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章