我很难理解这个
我试过了:
if not None:
print('True')
为什么打印True?None
类型不应该是None
吗?
所有Python对象都有一个真值,请参阅真值测试。这包括None
,它在布尔上下文中被认为是false。
此外,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方法,则该方法返回整数零或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
而不是True
或False
(或Apples
),你可以让它打印None
:
if not None:
print('None')