用下面的代码
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/