为什么控制台在打印python时有空间

时间:2012-11-28 21:52:52

标签: python

我只是注意到一些奇怪的东西

在python中,如果我这样做

>>> k = 1
>>> j = 2
>>> print k,",",j
1 , 2   # prints this

我预计会是:

1,2

为什么这两者之间有空格,而

>>> print str(k) + "," + str(j) 
1,2

由于

4 个答案:

答案 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)打印以逗号分隔的字符串列表