Python 是否';不是无';有什么用吗?
我惊讶地发现“Y中的X不是无”并没有抛出异常。我无法理解Python实际上是如何解释这一点的。“不是无”操作的值是什么?这有什么用吗Python 是否';不是无';有什么用吗?,python,python-3.x,Python,Python 3.x,我惊讶地发现“Y中的X不是无”并没有抛出异常。我无法理解Python实际上是如何解释这一点的。“不是无”操作的值是什么?这有什么用吗 >>> "asdf" in {} is not None False >>> >>> "asdf" in {"asdf": 1} is not None True >>> 巨蟒再次攻击 根据说12(这是False),而是(4>3)和(3>2)(这是True) 不是None顺便说一句,的标
>>> "asdf" in {} is not None
False
>>>
>>> "asdf" in {"asdf": 1} is not None
True
>>>
巨蟒再次攻击
根据说1<2<3
等同于1<2和2<3
的相同规则,这些表达式:
"asdf" in {} is not None
"asdf" in {"asdf": 1} is not None
相当于:
"asdf" in {} and {} is not None
"asdf" in {"asdf": 1} and {"asdf": 1} is not None
@另一个人已经指出了这个问题,我想我应该为那些不明白的人补充一点解释 这里要意识到的关键是,
不是
类似于=
中的code>和也属于同一类别-它们都是比较运算符。这些运算符适用于它们周围的所有类型的值
因为Python允许链接比较运算符,所以最主要的事情是计算它们的求值顺序以及它们对什么进行操作
考虑:
>>> "asdf" in {} is not None
False
>>> ("asdf" in {}) is not None
True
>>> ("asdf" in {}) and ({} is not None)
False
>>> {} is not None
True
因此,{}中的表达式“asdf”不是None
分解为
,Python将其计算为和,所以({}中的asdf)和({}不是None)
Python之所以不将其视为({}中的asdf)并不是None
,这在其他一些语言中是有意义的,是因为Python不希望4>3>2
评估为(4>3)>2
(这是False
),而是(4>3)和(3>2)
(这是True
)
不是None
顺便说一句,的标识与None的标识相同,换句话说“
指的是与None
相同的东西”,这与说它们具有相同的值(或“它们的计算结果相同”)略有不同。由于只有一个None
,如果一个变量名指的是None
,考虑到({})中的asdf)不是None,第一个例子非常有趣。
返回True
是是一个<代码>非无
是操作的右侧-它与左侧的(已计算)表达式进行比较<代码>是
比较身份-无
是一个对象,以及真
和假
-无
将永远不会是真
或假
@wwii好点。左侧应该总是返回True/False,两者都不是None,所以整行应该总是返回False吗?啊,是的。非常感谢。