if
声明中引人注目的内容是什么?例如:
list_ = [1, 2, 3]
str_ = ''
if str_ or list_:
# do something
我们可以说这种情况会发生吗?
if bool(str_ or list_) is True:
# do something
答案 0 :(得分:0)
如果你说
a = 0
b = None
c = 123
d = 'aaa'
zzz = a or b or c or d
然后zzz
等于123
。因此,如果评估表达式并对该答案进行操作。由于Python将非空字符串,列表,非None
值,而不是零数字 - 作为True
,因此整个系统遵循bool代数。
答案 1 :(得分:0)
的值
str_ or list_
令人惊讶的是既不 True
也不 False
- 它只是str_
或list_
: - )
更确切地说 - 来自Python Language Reference:
表达式
x or y
首先评估x
;如果x
为真,则返回其值;否则,评估y
并得到结果 返回值。
然后,在if
声明中进行评估:
在布尔运算的上下文中,以及控制流语句使用表达式时,如下所示 值被解释为false:
False
,None
,所有类型的数字零,以及空字符串和容器(包括 字符串,元组,列表,字典,集合和frozensets)。所有其他值都被解释为true。用户定义的对象 可以通过提供__bool__()
方法来自定义其真值。
因此,在您的特定情况下,str_
为空,因此其布尔值被解释为False
,并且
str_ or list_
将评估变量list_
的值,i。即到[1, 2, 3]
。
然后
if [1, 2, 3]:
被解释为
if True:
因为[1, 2, 3]
不为空。