python中的坑

先来一段代码大家可以先猜猜输出是什么?

l = []

l == []
l is []

l == None
bool(l)

if not l:
    print "空"

if l is None:
    print "空"

答案如下:

l = []

1. l == []
True
2. l is []
False

3. l == None
False
4. bool(l)
False

5. if not l:
    print "空"6. if l is None:
    print "空"
没有输出

很多初学者包括我,以为1和2的输出都是 True,因为觉得在python中is和==是一样的用法的
其实在python中 ==仅仅对比对象的值,如果两个对象值相同,而地址不同,==也是成立的;而is是对比对象的地址,如果地址一致的话,值自然就一致了,所以is完全相等
至于如何查看对象的地址,使用id()即可

对于3和4, 比较容易让人误解的是3, 以为[]就是None,都是没有嘛,哈哈
4的话解释一下, 在python中,空对象、值为0的任何数字(包括整数、浮点数、复数)或者None对象的bool值都是False,其余对象都是True,4是属于空对象,空列表嘛。

56的话我比较容易混淆。我会常常以为5和6是一致的.一个很好的实践是在写if判断时脑补一下bool(statement),像5的话脑补成

if bool(not l)
    print "空"

6脑补成

if bool(l is None)
    print "空"

5是因为l是空对象,空对象的bool值是False,取反是True;
6是因为l is None, l并不等于None,bool值是False
这样的话就容易理解多了.

结论:

  • is 是对比对象的地址,是python当中的全等
  • ==仅仅是对比对象的
  • 在python中,空对象、值为0的任何数字(包括整数、浮点数、复数)或者None对象的bool值都是False,其余对象都是True
  • 使用if语句时,为了避免混淆,先脑补成if bool(statement)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值