为什么'if not None'返回True?

我无法理解这一点

我试过了:

if not None:
    print('True')

为什么它打印真实? 不是None类型应该是None吗?


在Python中, None是单身人士。 它在其他语言中被称为null

if not None: ,那么编译器假定不是None表示非空或非零,并且我们知道if语句将非零值评估为True并执行它们。

功能示例:

1) if not None:在test()中输出参数x

   def test(x):
       if not None:
           print(x)

   >>> test(2)
   2

2) if 1:在test()中打印参数x

   def test(x):
       if 1:
           print(x)

   >>> test(2)
   2

3) if -1:在test()中打印参数x

   def test(x):
       if -1:
           print(x)

   >>> test(2)
   2

4) if 0:不在test()中打印参数x

   def test(x):
       if 0:
           print(x)

   >>> test(2)

5) if True:在test()中输出参数x

   def test(x):
       if True:
           print(x)

   >>> test(2)
   2

所有的 Python对象都有一个真值,请参阅真值测试。 这包括None ,它在布尔上下文中被认为是错误的。

另外, not操作符必须总是产生布尔结果,不管是True还是False 。 如果not None产生False ,那么当bool(None)已经产生False时这会令人惊讶。

None值是一个哨兵对象,一个信号值。 您仍然需要能够测试该对象,并且它具有布尔值是非常有帮助的。 举个例子:

if function_that_returns_value_or_None():

如果None没有布尔值,则该测试会中断。


Python文档

4.1。 真值测试

任何对象都可以测试真值,用于if或while条件或者作为下面布尔运算的操作数。 以下值被认为是错误的:

没有

任何数字类型为零,例如0,0.0,0j。

任何空序列,例如'',(),[]。

任何空的映射,例如{}。

如果该类定义了bool ()或len ()方法,则该方法返回整数零或布尔值False时,用户定义类的实例。

链接地址: http://www.djcxy.com/p/76625.html

上一篇: Why does 'if not None' return True?

下一篇: Remove null element from mongo array