如果没有!= 0则该条件如何通过

时间:2015-12-03 16:48:02

标签: python

无法理解,如果None不等于零,那么下面的if条件是如何传递的?

\\\\

4 个答案:

答案 0 :(得分:3)

python中有许多东西在布尔上下文中使用时被认为是'falsy'(如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

答案 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条件,ifwhile都被认为是假的,但这并不意味着所有评价为“假”的东西本身等于。由于它们中的一些有不同的类型,它们并不相同。

所以底线是:

[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 == 0True == 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。 (重要的例外:布尔运算或者并且始终返回其中一个操作数。)