通常而言,当一个值本身是布尔类型时,写成”if xxx”(如果真),在语义上就很好理解。如果 xxx 本身不是布尔类型时,写成“if xxx”(如果某东西),则在语义上并不好理解。
在 C/C++/Java 之类的静态语言中,通常要先基于 xxx 作一个比较操作,比如“if (xxx == null)”,以此得到一个布尔类型的值的结果,然后再进行真值判断。否则的话,若“if xxx”中有非布尔类型的值,则会报类型错误。
Python 这门动态语言在这种场景中表现出了一种灵活性,那么问题来了:为什么 Python 不需要先做一次比较操作,直接就能对任意对象作真值判断呢?
简单而言,Python 的任何对象都可以用在 if 或 while 或布尔操作(and、or、not)中,默认情况下认为它是 true,除非它有bool() 方法返回False 或者有len() 方法返回0 。
对于前面的例子,mylist 没有bool() 方法,但是它有_len() 方法,所以它是否为 true,取决于这个方法的返回值。