为什么'如果不是没有'回归真的?

时间:2016-08-02 19:21:30

标签: python-3.x nonetype

我无法理解这个

我试过了:

if not None:
    print('True')

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

5 个答案:

答案 0 :(得分:4)

所有 Python对象都有真值,请参阅Truth Value Testing。这包括None,在布尔上下文中被认为是 false

此外,not运算符必须始终生成布尔结果TrueFalse。如果not None生成了False,那么当bool(None)已生成False时,这会令人惊讶。

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

if function_that_returns_value_or_None():

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

答案 1 :(得分:3)

Python Documentation

  

<强> 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而不是TrueFalse(或Apples)可以打印None

if not None:
    print('None')

答案 4 :(得分:-1)

在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