我无法理解这个
我试过了:
if not None:
print('True')
为什么打印为True?
我认为None
类型不应该是None
吗?
答案 0 :(得分:4)
所有 Python对象都有真值,请参阅Truth Value Testing。这包括None
,在布尔上下文中被认为是 false 。
此外,not
运算符必须始终生成布尔结果True
或False
。如果not None
生成了False
,那么当bool(None)
已生成False
时,这会令人惊讶。
None
值是 sentinel对象,一个信号值。您仍然需要能够测试该对象,并且它具有布尔值非常有用。举个例子:
if function_that_returns_value_or_None():
如果None
没有布尔值,那么该测试就会中断。
答案 1 :(得分:3)
<强> 4.1。真值测试
可以测试任何对象的真值,用于if或while条件或下面布尔运算的操作数。以下值被视为false:
无
假
任何数字类型的零,例如,0,0.0,0j。
任何空序列,例如&#39;&#39;,(),[]。
任何空映射,例如{}。
用户定义类的实例,如果类定义 bool ()或 len ()方法,则该方法返回整数零或bool值False。
答案 2 :(得分:1)
每个值都有一个称为“真实性”的属性。 string dateString;
CultureInfo culture;
DateTimeStyles styles;
DateTime dateResult;
// Parse a date and time with no styles.
dateString = "03/01/2009 10:00 AM";
culture = CultureInfo.CreateSpecificCulture("en-US");
styles = DateTimeStyles.None;
if (DateTime.TryParse(dateString, culture, styles, out dateResult))
Console.WriteLine("{0} converted to {1} {2}.",
dateString, dateResult, dateResult.Kind);
else
Console.WriteLine("Unable to convert {0} to a date and time.",
dateString);
的“真实性”是None
。这有几个原因,例如当您认为False
的返回值为失败或None
时的干净代码。
False
,''
,[]
或0
等“空”对象的评估均为false。请注意,这不包括{}
(字符串)或'None'
等对象。
因此'0'
会将if not None
转换为None
。
“真实性”也被称为“booleaness”,在某些情况下更为正式。
答案 3 :(得分:0)
[反讽模式]
如果您不满意打印True
,可以打印False
:
if not None:
print('False')
现在打印False:)
编辑:如果您担心为什么它不会打印None
而不是True
或False
(或Apples
)可以打印None
:
if not None:
print('None')
答案 4 :(得分:-1)
在Python中None
是一个单身人士。它在其他语言中称为null
。
在if not None:
中,编译器假定非None表示非空或非零,我们知道if语句将非零值计算为True
并执行它们。
功能示例:
1)if not None:
在test()
def test(x):
if not None:
print(x)
>>> test(2)
2
2)if 1:
在test()
def test(x):
if 1:
print(x)
>>> test(2)
2
3)if -1:
在test()
def test(x):
if -1:
print(x)
>>> test(2)
2
4)if 0:
不会在test()
def test(x):
if 0:
print(x)
>>> test(2)
5)if True:
在test()
def test(x):
if True:
print(x)
>>> test(2)
2