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

2024-05-06 19:04:15 发布

您现在位置:Python中文网/ 问答频道 /正文

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

第一个表达式将引发IndexError,但第二个表达式很好。它是如何发生的


Tags: noneif表达式elseindexerror
1条回答
网友
1楼 · 发布于 2024-05-06 19:04:15

带有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

相关问题 更多 >