b()
只有在
a(my_var)
为真时才会被执行,是的。如果
a(my_var)
是假值,那么
and
运算符将短路。从
boolean operators documentation可以看到:
表达式x and y
首先计算x
;如果x
为false,则返回其值;否则,计算y
并返回结果值。
您可以使用一个调用时打印输出的函数进行测试:
>>> def noisy(retval):
... print "Called, returning {!r}".format(retval)
... return retval
...
>>> noisy(True) and noisy('whatever')
Called, returning True
Called, returning 'whatever'
'whatever'
>>> noisy(False) and noisy('whatever')
Called, returning False
False
Python将空容器和数值0视为假:
>>> noisy(0) and noisy('whatever')
Called, returning 0
0
>>> noisy('') and noisy('whatever')
Called, returning ''
''
>>> noisy({}) and noisy('whatever')
Called, returning {}
{}
自定义类可以实现__nonzero__
钩子来返回布尔标志进行相同的测试,或者如果它们是容器类型,则实现__len__
钩子; 返回0
表示容器为空且应视为false。
在一个紧密相关的注释中,or
运算符执行相同的操作,但是反过来。如果第一个表达式评估为true,则不会评估第二个表达式:
>>> noisy('Non-empty string is true') or noisy('whatever')
Called, returning 'Non-empty string is true'
'Non-empty string is true'
>>> noisy('') or noisy('But an empty string is false')
Called, returning ''
Called, returning 'But an empty string is false'
'But an empty string is false'