在字符串连接中使用三元运算符时,我在python中看到了一种奇特的行为 -
>>> foo = "foo"
>>> foo.upper()
'FOO'
>>> bar = 2
>>> "" if bar is 0 else str(bar)
'2'
>>> foo.upper() + "_" + "" if bar is 0 else str(bar)
'2'
使用上面的代码我期望它应该输出为FOO_2
但只显示2
。虽然我可以用下面的代码实现输出。任何人都可以解释为什么它不与+
合作?
>>> "{}_{}".format(foo.upper(), "" if bar is 0 else str(bar))
'FOO_2'
operator precedence在这里起着至关重要的作用。表达式评估为:
(foo.upper() + "_" + "") if bar is 0 else str(bar)
这是因为条件表达式在加法和减法之前。
使用括号来强制执行所需的评估顺序:
foo.upper() + "_" + ("" if bar is 0 else str(bar))
或者,可能更好的是通过extracting a variable降低复杂性以避免任何可能的混淆:
postfix = "" if bar is 0 else str(bar)
print(foo.upper() + "_" + postfix)