如果没有!=0那么这个条件是如何传递的

2024-03-28 14:23:03 发布

您现在位置:Python中文网/ 问答频道 /正文

无法理解,如果没有不等于零,那么下面的条件是如何传递的?你知道吗

>>> None == 0
False
>>> if not None:
...   print ("1")
...
1
>>>
>>> None == False
False
>>>

Tags: nonefalseifnot条件print
3条回答

python中有许多东西在布尔上下文中使用时被认为是“错误的”(比如if语句或布尔运算符,比如andnotor,等等)。你知道吗

特别是None、False、比较等于0的任何数值数据类型,或实现__len__len(container) == 0的任何类型。你知道吗

有关更多信息,请考虑:

>>> bool(False)
False
>>> bool(0)
False
>>> bool([])
False
>>> bool('')
False
>>> bool(None)
False
>>> not None
True
>>> not 0
True
>>> not False
True
>>> not ''
True
>>>

有关更多信息,请参见docs

让我们问一下python shell。。。你知道吗

In [1]: None == 0
Out[1]: False

In [2]: not None
Out[2]: True

In [3]: None?
Type:        NoneType
String form: None
Namespace:   Python builtin
Docstring:   <no docstring>

所以这可能会给你一个提示,为什么None==0返回False。进一步提示。。你知道吗

In [6]: i = 0

In [7]: i?
Type:        int
String form: 0
Docstring:
int(x=0) -> int or long
int(x, base=10) -> int or long

有了这些信息,我们就可以深入了解python的真相系统。。。你知道吗

The following values are considered false:

None

False

zero of any numeric type, for example, 0, 0L, 0.0, 0j.

是的,对于if/while条件,None0都被认为是假的,但这并不意味着所有计算为“假”的事物本身都是相等的。由于它们中的一些有不同的类型,它们不是等价的。你知道吗

所以底线是:

[1]在if/while语句中,并非所有计算结果都是False的语句本身是相等的。你知道吗

[2]原因是Python的类型系统

>>> bool(None)
False
>>> bool(0)
False
>>> None == 0
False
>>> bool(None) == bool(0)
True

Python中的比较是typesafe*,这意味着即使两个变量都是truthy(或不是truthy),也不意味着它们的直接比较返回true。你知道吗

>>> type(None)
<class 'NoneType'>
>>> type(0)
<class 'int'>

*除了False == 0True == 1是有保证的,==运算符是可重载的。你知道吗

相关问题 更多 >