为什么Python的打印功能会这样做?

时间:2015-09-16 16:30:00

标签: python printing syntax

我正在编写一个简单的Hello World Python脚本,并尝试了几个不同的东西来看看我会得到什么。

结果:

print "Hello World"      ===> Hello World
print "Hello"," ","World ===> Hello   World
print "Hello" "World"    ===> HelloWorld

结果让我感到惊讶......根据其他语言的经验,我希望得到更多类似的东西:

print "Hello World"      ===> Hello World
print "Hello"," ","World ===> Hello World
print "Hello" "World"    ===> Syntax Error!

在尝试了几个例子之后,我意识到每当你用“,”分隔字符串时它似乎都会添加一个空格。

...更奇怪的是,如果你给它多个字符串而没有“,”就像第三个例子那样将它们分开,似乎并不在乎。

为什么Python的打印功能会这样做?

还有办法阻止它为“,”分隔字符串添加空格吗?

1 个答案:

答案 0 :(得分:6)

因为print语句在单独的值之间添加了空格,因为documented

  

在每个对象(转换和)写入之前写入一个空格,除非输出系统认为它位于一行的开头。

但是,"Hello" "World"不是两个值;它是一个字符串。只忽略两个字符串文字之间的空格,并连接这些字符串文字(by the parser):

>>> "Hello" "World"
"HelloWorld"

请参阅String literal concatenation section

  

允许使用不同引用约定的多个相邻字符串文字(由空格分隔),其含义与其连接相同。

这样可以更轻松地组合不同的字符串文字样式(三重引号和原始字符串文字以及常规'字符串文字都可用于创建一个值),以及创建 long 字符串值更容易格式化:

long_string_value = (
    "This is the first chuck of a longer string, it fits within the "
    'limits of a "style guide" that sets a shorter line limit while '
    r'at the same time letting you use \n as literal text instead of '
    "escape sequences.\n")

这个功能实际上是从C继承的,它不是Python的发明。

在Python 3中,print() is a function而不是语句,您可以更好地控制如何处理多个参数。单独的参数由函数的sep参数分隔,默认为空格。

在Python 2中,您可以通过将from __future__ import print_function添加到模块顶部来获得相同的功能。这会禁用该语句,从而可以使用same function in Python 2 code