在if语句中引发了什么?

时间:2018-01-04 16:57:18

标签: python

if声明中引人注目的内容是什么?例如:

list_ = [1, 2, 3]
str_ = ''

if str_ or list_:
    # do something

我们可以说这种情况会发生吗?

if bool(str_ or list_) is True:
    # do something

2 个答案:

答案 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:FalseNone,所有类型的数字零,以及空字符串和容器(包括   字符串,元组,列表,字典,集合和frozensets)。所有其他值都被解释为true。用户定义的对象   可以通过提供__bool__()方法来自定义其真值。

因此,在您的特定情况下,str_为空,因此其布尔值被解释为False,并且

str_ or list_

将评估变量list_的值,i。即到[1, 2, 3]

然后

if [1, 2, 3]:

被解释为

if True:

因为[1, 2, 3]不为空。