我正在编写一个简单的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的打印功能会这样做?
还有办法阻止它为“,”分隔字符串添加空格吗?
答案 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。