我只是注意到一些奇怪的东西
在python中,如果我这样做
>>> k = 1
>>> j = 2
>>> print k,",",j
1 , 2 # prints this
我预计会是:
1,2
为什么这两者之间有空格,而
>>> print str(k) + "," + str(j)
1,2
由于
答案 0 :(得分:7)
第一个示例直接将3个参数传递给print
,然后将它们转换为字符串并将它们连接在一起,用空格分隔。第二个示例首先转换并连接字符串,然后将整个字符串作为单个参数传递给print
。如果您要改为print str(k), ",", str(j)
,则会得到与第一个示例相同的结果。
在功能如何工作而不是关键字方面考虑print
。例如,请:
def foo(*args):
return ' '.join(map(str, args))
foo('a', 'b', 'c')
将传递foo 3个参数,然后返回由空格'a b c'
连接的3个参数。 foo('a' + 'b' + 'c')
将首先创建字符串'abc'
,然后将其作为单个参数传递给foo,从而导致foo仅返回'abc'
。
答案 1 :(得分:2)
这就是print
在Python 2中的工作方式。在Python 3中,打印为more configurable。
实现目标的更好方法是使用string formatting:
print '{0},{1}'.format(k, j)
或使用旧式字符串格式:
print '%d,%d' % (k, j)
答案 2 :(得分:2)
就是这样。一个原因可能是调试。像世界其他地方的大多数人一样,我经常使用print
语句进行调试,因为它比使用pdb
简短的简单脚本更快更容易。
考虑:
a = 1
b = 2
print a,b
现在打印1 2
,这很清楚它与print
得到2个参数的行匹配。 (在您的示例中,第一次将3个参数传递给print
,第二次只传递1个参数)。想象一下如果它print a,b
给你12
会有多么混乱!你会仔细查看你的代码,试图找出12
的来源。当然,正如其他人所指出的那样,如果您对如何打印事物有更严格的要求,则可以使用字符串格式。
答案 3 :(得分:0)
正如其他人所指出的,主要原因可能是调试。在这方面,看看当你在同一行打印多个值进行调试时会发生什么:
>>> print myObj1, myObj2
myFirstObj mySecondObj
这样,我不必在打印出来用于调试目的的变量之间打印空格,使print
轻量级用于此用途。
当然,正如其他人所指出的那样,最好使用','.join(myListOfStrings)
打印以逗号分隔的字符串列表