我知道Python中的条件表达式是X if C else Y,但我在使用它时遇到了一些问题。在
我有两个代码要比较。在
代码1:
def fun(p):
if len(p) >= 2:
p[1] = 'Ok'
else:
p.append('Ok')
p = [1]
fun(p)
print p
代码1的输出:
^{pr2}$代码2:
def fun(p):
(p[1] = 'Ok') if (len(p) >= 2) else p.append('OK')
p = [1]
fun(p)
print p
代码2的输出:
(p[1] = 'Ok') if (len(p) >= 2) else p.append('OK')
^
SyntaxError: invalid syntax
我知道代码1的格式是“if C:X else:Y”,求值顺序是:
代码2抛出语法错误,原因可能是p[1]不存在。所以我想“X if C else Y”格式的计算如下:
但那只是我的猜测。有人知道代码2错误而代码1正确的真正原因吗?在
赋值不是表达式(其他人指出)。因此出现了语法错误。在
关于您关于评估顺序的问题:
在if-else表达式(!)首先计算条件操作数,然后计算then操作数(最左边)或else操作数(最右边)。另一个操作数的计算值是而不是。在
在或-表达式中,操作数从最左到最右(
a or b or c or d or ...
)计算,但只在找到布尔值为真的操作数之前。其余表达式的计算结果是而不是。在在和-表达式中,操作数从左到右(
a and b and c and d and ...
)计算,但只在找到布尔值为False的操作数之前。其余表达式的计算结果是而不是。在内部表达式在外部表达式之前计算(当然):
third(second(first()))
在所有其他情况下(
a() + b()
,f(g(), h())
,a[b[c]] = d() + e
)的顺序被定义为specified。通常是从左到右,除了赋值(它在左前右)。在之所以有
SyntaxError
,是因为Python区分语句和表达式。在作业,比如
are语句并且不能是表达式的一部分,包括条件表达式。有关详细信息,请参见What is the difference between an expression and a statement in Python?。在
求值的顺序并不是这样的
SyntaxError
发生在任何代码被解析之前。在在
if
语句和条件表达式中,求值的顺序是以太或
所以,在
^{pr2}$或者
根据条件的真实性,只计算fase语句的true或。在
正如dand.指出的,在表达式上下文中不能有语句。在
为了便于学习,我不建议这样做,我将向您展示如何使用内联
X if C else Y
来完成您正在尝试的操作:如您所见,您的第一个版本更具可读性。在
相关问题 更多 >
编程相关推荐