您当前的位置:首页 > 计算机 > 编程开发 > Python

Python编程一定要注意的那些“坑”(四)

时间:12-24来源:作者:点击数:
CDSY,CDSY.XYZ

已发过的“坑”请参考Python函数默认值参数的2个坑Python编程中一定要注意的那些“坑”(一)Python编程中一定要注意的那些“坑”(二)Python中一定要注意的那些“坑”(三)

今天来说说关键字False的“坑”。先来看一段代码:

>>> def find(lst, e):

if e in lst:

return lst.index(e)

else:

return False

>>> def main(lst, e):

r = find(lst, e)

if r != False:

print(lst[r])

else:

print('not exist')

>>> main(list(range(5)), 5)

not exist

>>> main(list(range(5)), 0)

not exist

上面的函数find()用来测试列表lst中是否包含元素e,如果包含就返回其首次出现的下标,否则返回False表示不存在。函数main()调用函数find(),如果find()函数返回False则认为列表lst中不包含元素e,否则就认为包含并输出该位置上的元素。

思路看起来很自然,但很明显最后一个结果是错的。原因在于,Python内部把False和0认为是等价的,而把True和1认为是等价的,但作为条件表达式时把非0的数字(哪怕是负数)认为和True是等价的。例如:

>>> not 0

True

>>> not False

True

>>> not (-3)

False

>>> not 5

False

>>> lst = list(range(5))

>>> lst[0]

0

>>> lst[False]

0

>>> False + 3

3

>>> True + 3

4

>>> 0 == False

True

>>> 1 == True

True

>>> 3 == True

False

让我们回到本文最初的问题,既然这里有个坑,那正确的代码应该怎么写呢?那就要学学Python字符串对象的find()和rfind()方法了,如果包含就返回其首次出现位置,如果不包含就返回-1,而不是False。

>>> 'abcd'.find('a')

0

>>> 'abcd'.find('e')

-1

最后留个小思考题:下面表达式的值是什么,原理是啥?

eval('*'.join(map(str, range(1, 7))))

CDSY,CDSY.XYZ
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门