Python 优先级

标签 python conditional-operator operator-precedence

用下面的代码

import sys
print "Hello " + sys.argv[1] if len(sys.argv) > 1 else "Joe" + "."

当我运行时

  • python hello.py,我得到 Joe。 - Hello 丢失了。
  • python hello.py Nick,我得到 Hello Nick - The period '.'到底是失踪了。

但是,当我更改代码以使用 () 覆盖三元运算时,它可以正常工作。

import sys
print "Hello " + (sys.argv[1] if len(sys.argv) > 1 else "Joe") + "."

当我运行时

  • python hello.py,我得到 Hello Joe.
  • python hello.py Nick,我得到 Hello Nick.

有人可以解释为什么当我没有用大括号覆盖三元运算符时会有不同的行为吗。

最佳答案

参见 documented operator precedence ;条件表达式具有唯一但最低的优先级,只有 lambda 较低。

您可能需要查看 string format syntax而不是手动连接字符串对象:

print "Hello {}.".format(sys.argv[1] if len(sys.argv) > 1 else "Joe")

关于Python 优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21959424/

相关文章:

python - Py.Test : Report using --cov, 排除了报告中的一些 'def' 并且没有显示任何失败

python - Macports 声称 python 是 2.7.6,但是 python --version 说 2.7.5

Python 条件运算符 'if else' 不等于 'and or'

c++ - C 中的左值必需错误

java - Java 中的运算符优先级(位移运算符): why is the following output true?

c++ - 与 ? 一起使用时的逗号运算符优先级: operator

python - 如何将列表转换为具有数组中元素的特定顺序的数组

python - python脚本中的awk命令

PHP 条件运算符和自赋值

c++ - 在什么平台上 func(shared_ptr(...), shared_ptr(...)) 真的很危险?