任何人都可以解释为什么:具体的Python的的if/else一个衬垫参数替换
>>> print 1,2 if 0 else 3,4
1 3 4
但:
>>> print(1,2) if 0 else 3,4
3 4
也许这不是在所有这种情况下连接?
任何人都可以解释为什么:具体的Python的的if/else一个衬垫参数替换
>>> print 1,2 if 0 else 3,4
1 3 4
但:
>>> print(1,2) if 0 else 3,4
3 4
也许这不是在所有这种情况下连接?
引用docs:
打印评估依次在每个表达,将所得 对象写入标准输出。
所以我们只需要弄清楚这些表达式就是你的情况。
print 1,2 if 0 else 3,4
相当于print 1, (2 if 0 else 3), 4
。打印语句接收三个“参数”,第一个和第三个是常量表达式,第二个包含三元语句。
print(1,2) if 0 else 3,4
相当于打印(1,2) if 0 else 3, 4
。打印语句接收两个“参数”,第一个包含三元语句,第二个是常量表达式。
你的第一个例子给出了三个项目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,(2如果0,否则,3),4'和第二是'print((1,2)if 0 else 3),4' - 参见https://docs.python.org/2/reference/expressions.html#operator-precedence和https://docs.python.org /2/library/stdtypes.html#truth-value-testing。目前尚不清楚哪一部分令人惊讶。 – jonrsharpe
这就是为什么你应该使用括号打印的原因。为了避免这种混淆。 –