python 3.x - 为什么'if not None'返回 True?



我很难理解这个

我试过了:

if not None:
    print('True')

为什么打印True?None类型不应该是None吗?

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

此外,not运算符必须始终生成布尔结果TrueFalse。如果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方法,则该方法返回整数零或bool值False。

在Python中,None是一个单例。它在其他语言中被称为null

if not None:中,编译器假设not None表示非空或非零,并且我们知道if语句将非零值计算为True并执行它们。

功能示例:

1) if not None:在测试()中打印参数x

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

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

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

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

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

4) if 0:未在测试()中打印参数x

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

5) if True:在测试()中打印参数x

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

每个值都有一个称为"truthiness"的属性。None的"真性"是False。这样做有几个原因,例如当您认为None的返回值为failure或False时,使用干净的代码。

"空"对象(如''[]0{})的计算结果均为false。请注意,这不包括像'None'(字符串)或'0'这样的对象。

因此CCD_ 32将CCD_ 33转换为CCD_。

"Truthiness"也被称为"booleaness",在某些情况下更正式。

[启用Irony模式]

如果你不喜欢打印True,你可以让它打印False:

if not None:
    print('False')

现在它打印错误:)

编辑:如果你担心它为什么不打印None而不是TrueFalse(或Apples),你可以让它打印None:

if not None:
    print('None')

相关内容

最新更新