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

tjw*_*992 2 python printing syntax

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

结果:

print "Hello World"      ===> Hello World
print "Hello"," ","World ===> Hello   World
print "Hello" "World"    ===> HelloWorld
Run Code Online (Sandbox Code Playgroud)

结果让我感到惊讶......从其他语言的经验来看,我希望得到更像这样的东西:

print "Hello World"      ===> Hello World
print "Hello"," ","World ===> Hello World
print "Hello" "World"    ===> Syntax Error!
Run Code Online (Sandbox Code Playgroud)

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

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


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

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

Mar*_*ers 6

因为print语句添加之间的间隔不同的值,如记录:

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

但是,"Hello" "World"不是两个值; 它是一个字符串.只忽略两个字符串文字之间的空格,并且这些字符串文字是连接的(由解析器):

>>> "Hello" "World"
"HelloWorld"
Run Code Online (Sandbox Code Playgroud)

请参阅字符串文字串联部分:

允许使用多个相邻的字符串文字(由空格分隔),可能使用不同的引用约定,并且它们的含义与它们的连接相同.

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

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")
Run Code Online (Sandbox Code Playgroud)

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

在Python 3,其中print()是一个函数,而不是一个声明,您有过争论如何多的处理更多的控制.单独的参数由sep函数的参数分隔,默认为空格.

在Python 2中,您可以通过添加from __future__ import print_function到模块顶部来获得相同的功能.这会禁用该语句,从而可以在Python 2代码中使用相同的函数.