【问题标题】:Specific of the python's if/else one liner argument substitution特定于 python 的 if/else 一行参数替换
【发布时间】:2016-04-23 20:02:47
【问题描述】:

谁能解释一下原因:

>>> print 1,2 if 0 else 3,4
1 3 4

但是:

>>> print(1,2) if 0 else 3,4
3 4

或者这根本与这种情况无关?

【问题讨论】:

标签: python ternary-operator


【解决方案1】:

您的第一个示例为print 提供了三个项目,它们以逗号分隔:

1
2 if 0 else 3
4

你可以把括号放在不同的地方,得到相同的结果:

print 1, (2 if 0 else 3), 4

如果你想拥有元组行为,你可以在那里使用括号:

print (1, 2) if 0 else (3, 4)

当然,问题在于它打印为元组而不是单独的参数。真的,最好的办法是要么使用from __future__ import print_function并使用print(*((1, 2) if 0 else (3, 4))),要么拥有一个完整的if-else块:

if 0:
    print 1, 2
else:
    print 3, 4

【讨论】:

    【解决方案2】:

    引用docs:

    print 依次计算每个表达式并写入结果 对象到标准输出。

    所以我们只需要弄清楚这些表达式是否适合您。

    print 1,2 if 0 else 3,4 等价于print 1, (2 if 0 else 3), 4。 print 语句接收三个“参数”,第一个和第三个是常量表达式,第二个包含三元语句。

    print(1,2) if 0 else 3,4 等价于打印(1,2) if 0 else 3, 4。 print 语句接收两个“参数”,第一个包含三元语句,第二个是常量表达式。

    【讨论】:

      猜你喜欢
      • 2014-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      相关资源
      最近更新 更多