无法理解,如果None不等于零,那么下面的if条件是如何传递的?
\\\\
答案 0 :(得分:3)
python中有许多东西在布尔上下文中使用时被认为是'falsy'(如if语句或布局运算符,如and
,not
,or
等)。
特别是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
答案 1 :(得分:2)
让我们问一下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的真相系统......
以下值被视为false:
无
假
任何数字类型的零,例如,0,0L,0.0,0j。
是的,对于None
/ 0
条件,if
和while
都被认为是假的,但这并不意味着所有评价为“假”的东西本身等于。由于它们中的一些有不同的类型,它们并不相同。
所以底线是:
[1]并非False
/ if
声明中所有评估为while
的内容都是平等的。
[2]原因是Python的Type系统
答案 2 :(得分:2)
>>> bool(None)
False
>>> bool(0)
False
>>> None == 0
False
>>> bool(None) == bool(0)
True
Python中的比较是类型安全*,这意味着即使2个变量都是真实的(或不是真实的)并不意味着它们的直接比较返回true。
>>> type(None)
<class 'NoneType'>
>>> type(0)
<class 'int'>
*,但保证False == 0
和True == 1
并且==
运算符可重载。
答案 3 :(得分:0)
请参阅Python文档中的Truth Value Testing章节。
可以测试任何对象的真值,用于if或while条件或下面布尔运算的操作数。以下值被视为false:
无
假
任何数字类型的零,例如0,0L,0.0,0j。
任何空序列,例如&#39;&#39;,(),[]。
任何空映射,例如{}。
用户定义类的实例,如果类定义非零()或 len ()方法,则该方法返回整数零或bool值假。 1
所有其他值都被认为是真的 - 因此许多类型的对象始终为真。
除非另有说明,否则具有布尔结果的操作和内置函数总是返回0或False表示false,1或True表示true。 (重要的例外:布尔运算或者并且始终返回其中一个操作数。)