为什么Types在Python中返回True?

时间:2015-09-03 18:33:09

标签: python python-3.x if-statement types

我理解我transition.slideDownBigIn声明只会执行'如果它评估if

如果是这样, types 返回True的目的是什么?

这条规则背后的逻辑是什么?

有人可以举个例子说明它有用吗?

示例:

True

返回:

enter image description here

3 个答案:

答案 0 :(得分:3)

所有对象(包括类型,都是type的实例)本质上都是真的,因为它们表示存在基础类型的值,而不是表示缺少值的None任何类型。 (None评估为true只是因为它是NoneType的一个实例,这没有用。)

某些类型的某些实例(空字符串和容器类型的空实例,仅举几例)评估为False,因为考虑它们很方便。

在您自己的类中,您可以通过覆盖__nonzero____len__来覆盖特定实例的真值,以便为特定实例返回0或False

答案 1 :(得分:3)

来自docs:

  

可以测试任何对象的真值,以便在if或while中使用   条件或下面的布尔运算的操作数。下列   值被视为错误:

     

     

     

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

     

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

     

任何空映射,例如{}。

     

用户定义类的实例,如果类定义了   __nonzero __()或__len __()方法,当该方法返回整数零或bool值False时。 [1]

     

<强>&GT;所有其他值都被认为是真的 - 所以很多类型的对象都是   永远都是。

     

始终具有布尔结果的操作和内置函数   除非另有说明,否则返回0或False表示false,1表示True或True表示true   说明。 (重要的例外:布尔运算或和,并且始终   返回他们的一个操作数。)

由于所有类型都是从对象派生的,__nonzero__不返回False或整数零,并且它们没有__len__方法,因此它被视为True。

还有一件有趣的事情: float __nonzero__<slot wrapper '__nonzero__' of 'float' objects>

以下是有关该信息的一些信息: What is a wrapper_descriptor, and why is Foo.__init__() one in this case?

答案 2 :(得分:-2)

基本问题是:

  

这条规则背后的逻辑是什么?

此规则用于定义 Python(应该)如何操作:只要有一个if语句的值为TrueFalse,结果就应该是明确。对于所有实现都是一样的!

暗示它是一种好的风格。也不应该使用它

if float(3.14):
    print("is not a proper way to program")
 else:
    print("even it is clearly defined what will happen")

个人,我不知道将要打印什么。而且我不会查找它,因为它无论如何都是坏的。我总是告诉我的班级:&#34; 即使编译器理解它,你的大学也不会#34;