【问题标题】:Python precedencePython 优先级
【发布时间】:2023-03-12 05:29:01
【问题描述】:

使用以下代码

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 - 句号“。”到底不见了。

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

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.

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

【问题讨论】:

  • 它被称为conditional expression;它是 a 三元运算符。它恰好是目前唯一的三元运算符,但您也不会一直调用 +and 二元运算符。
  • 这是format 提供帮助的地方。 print "Hello {}.".format(sys.argv[1] if len(sys.argv) > 1 else "Joe") :)

标签: python conditional-operator operator-precedence


【解决方案1】:

documented operator precedence;条件表达式的优先级最低,只有lambda 更低。

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

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

【讨论】:

    猜你喜欢
    • 2013-02-13
    • 1970-01-01
    • 2016-09-23
    • 2023-04-02
    • 1970-01-01
    • 2019-02-02
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多