2024-03-28 14:23:03 发布
网友
无法理解,如果没有不等于零,那么下面的条件是如何传递的?你知道吗
>>> None == 0 False >>> if not None: ... print ("1") ... 1 >>> >>> None == False False >>>
python中有许多东西在布尔上下文中使用时被认为是“错误的”(比如if语句或布尔运算符,比如and、not、or,等等)。你知道吗
and
not
or
特别是None、False、比较等于0的任何数值数据类型,或实现__len__且len(container) == 0的任何类型。你知道吗
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。进一步提示。。你知道吗
None==0
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:NoneFalsezero of any numeric type, for example, 0, 0L, 0.0, 0j.
The following values are considered false:
None
False
zero of any numeric type, for example, 0, 0L, 0.0, 0j.
是的,对于if/while条件,None和0都被认为是假的,但这并不意味着所有计算为“假”的事物本身都是相等的。由于它们中的一些有不同的类型,它们不是等价的。你知道吗
if
while
所以底线是:
[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 == 0和True == 1是有保证的,==运算符是可重载的。你知道吗
False == 0
True == 1
==
python中有许多东西在布尔上下文中使用时被认为是“错误的”(比如if语句或布尔运算符,比如
and
、not
、or
,等等)。你知道吗特别是None、False、比较等于
0
的任何数值数据类型,或实现__len__
且len(container) == 0
的任何类型。你知道吗有关更多信息,请考虑:
有关更多信息,请参见docs
让我们问一下python shell。。。你知道吗
所以这可能会给你一个提示,为什么
None==0
返回False。进一步提示。。你知道吗有了这些信息,我们就可以深入了解python的真相系统。。。你知道吗
是的,对于
if
/while
条件,None
和0
都被认为是假的,但这并不意味着所有计算为“假”的事物本身都是相等的。由于它们中的一些有不同的类型,它们不是等价的。你知道吗所以底线是:
[1]在
if
/while
语句中,并非所有计算结果都是False
的语句本身是相等的。你知道吗[2]原因是Python的类型系统
Python中的比较是typesafe*,这意味着即使两个变量都是truthy(或不是truthy),也不意味着它们的直接比较返回true。你知道吗
*除了
False == 0
和True == 1
是有保证的,==
运算符是可重载的。你知道吗相关问题 更多 >
编程相关推荐