为啥三元条件不适用于字符串连接
Posted
技术标签:
【中文标题】为啥三元条件不适用于字符串连接【英文标题】:Why ternary condition not working perfectly for string concatenation为什么三元条件不适用于字符串连接 【发布时间】:2018-06-13 18:51:51 【问题描述】:在字符串连接中使用三元运算符时,我在 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'
【问题讨论】:
docs.python.org/3/reference/… 除此之外:这与您的问题无关,但不要在您的意思是==
的地方使用 is
- 请参阅 here 或 here。
【参考方案1】:
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)
【讨论】:
以上是关于为啥三元条件不适用于字符串连接的主要内容,如果未能解决你的问题,请参考以下文章
Mongodb Atlas 连接字符串不适用于 Zapier
为啥这种“嵌套连接”适用于 PDO 而不适用于 MySql cli?