python条件表达式中的疏散顺序

时间:2015-09-14 03:03:30

标签: python expression conditional-statements

a=[]
b=[]
c= a[0],b if a else (None,None)
d= (a[0],b) if a else (None,None)

第一个表达式会引发IndexError,但第二个表达式很好。它是怎么回事。

1 个答案:

答案 0 :(得分:2)

IndexError的代码行正在评估a[0]的值,而不是c= a[0],b if a else (None,None) 之后的行。

对于这一行:

c

发生的事情如下:

变量a[0]被赋予if的值以及b if a else (None,None)语句a[0]产生的值。
为此,该行必须评估d= (a[0],b) if a else (None,None) 中的值。

对于这一行:

a[0]

尚未评估if的值。因为a[0]语句未达到将尝试评估d= (a[0],b) if True else (None,None) 中的值的元组。

如果您要将行更改为:

IndexError

您还可以获得ScriptingContainer container = new ScriptingContainer(); container.runScriptlet("puts 'hello world'");