Python优先级

Joe*_*Joe 2 python conditional-operator operator-precedence

使用以下代码

import sys
print "Hello " + sys.argv[1] if len(sys.argv) > 1 else "Joe" + "."
Run Code Online (Sandbox Code Playgroud)

当我跑

  • python hello.py,我明白了Joe.- Hello失踪了.
  • python hello.py Nick,我得到Hello Nick- 期间'.' 最后遗失了.

但是,当我更改代码以覆盖三元操作时(),它可以正常工作.

import sys
print "Hello " + (sys.argv[1] if len(sys.argv) > 1 else "Joe") + "."
Run Code Online (Sandbox Code Playgroud)

当我跑

  • python hello.py我明白了 Hello Joe.
  • python hello.py Nick我明白了 Hello Nick.

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

Mar*_*ers 6

查看记录的运算符优先级 ; 条件表达式具有一个但最低的优先级,只有lambda较低的优先级.

您可能希望查看字符串格式语法,而不是手动连接字符串对象:

print "Hello {}.".format(sys.argv[1] if len(sys.argv) > 1 else "Joe")
Run Code Online (Sandbox Code Playgroud)