特定于python的if / else一个线性参数替换

时间:2016-04-23 20:02:47

标签: python ternary-operator

任何人都可以解释原因:

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

但:

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

或者这根本与这个条件无关?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

引用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语句接收两个“参数”,第一个包含三元语句,第二个是常量表达式。