我理解我transition.slideDownBigIn
声明只会执行'如果它评估if
?
如果是这样, types 返回True
的目的是什么?
这条规则背后的逻辑是什么?
有人可以举个例子说明它有用吗?
示例:
True
返回:
答案 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语句的值为True
或False
,结果就应该是明确。对于所有实现都是一样的!
它不暗示它是一种好的风格。也不应该使用它
if float(3.14):
print("is not a proper way to program")
else:
print("even it is clearly defined what will happen")
个人,我不知道将要打印什么。而且我不会查找它,因为它无论如何都是坏的。我总是告诉我的班级:&#34; 即使编译器理解它,你的大学也不会#34;