Python中is、not、is not的区别

Python中isnot是两个关键字,而is not的组合可以看作又一个关键字,不可以将其看作是两个关键字的简单堆砌。

1. “is” keyword

is关键字的作用是判断两个变量是否指向同一对象,指向同一对象的意思是,两个变量在内存中指向同一块地址。

a is b等价于id(a) == id(b),这里函数id()的作用是返回变量的内存地址。

>>> a = 123
>>> b = 123
>>> a is b
True
>>> id(a)
140705145204944
>>> id(b)
140705145204944

>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> a is b
False
>>> id(a)
2211923907528
>>> id(b)
2211926561032

>>> c = a
>>> c
[1, 2, 3]
>>> a is c
True
>>> id(c)
2211923907528

2. “not” keyword

not关键字的作用是对一个对象进行逻辑取反。

>>> not 123
False
>>> not [1, 2, 3]
False
>>> not 0
True
>>> not None
True

值得一提的是,Python在判断一个对象的逻辑真假时,有一个 Truth Value Testing 的概念,在这里规定了如何定义一个对象的逻辑真假。

在这里插入图片描述

简单来说,如果一个对象:(1)内置了__bool__()方法,且返回False,或(2)内置了__len__()方法,且返回0,则在逻辑上将其视为假,否则视为真。

由此可知,以下对象均为逻辑假,使用bool()函数测试结果均为False(直接抄文档了):

  • constants defined to be false: None and False.
  • zero of any numeric type: 0, 0.0, 0j, Decimal(0), Fraction(0, 1)
  • empty sequences and collections: '', (), [], {}, set(), range(0)

同样地,使用not关键字测试上面的对象,结果均为True

3. “is not” keyword

is not实际上是一个比较运算符,用于判断对象是否不一致。(同样地,前面的is也是比较运算符,用于判断对象是否一致。)

is not不应该被拆开来理解,而应视作一个整体,即:a is not b的优先级不是a is (not b),而是a (is not) b

>>> a = 123
>>> a is not None
True
>>> a is (not None)
False
>>> bool(a) is (not None)
True

在官方文档中,对此的说明概括成了短短三句话

在这里插入图片描述

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值