前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python编程一定要注意的那些“坑”(四)

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

作者头像
Python小屋屋主
发布2018-04-17 10:55:49
1.1K0
发布2018-04-17 10:55:49
举报
文章被收录于专栏:Python小屋Python小屋

已发过的“坑”请参考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))))

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档