2

我刚刚注意到一些奇怪的事情

在python中,如果我这样做

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

我预计会是:

1,2

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

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

谢谢

4

4 回答 4

7

第一个示例将 3 个参数print直接传递给,然后将它们转换为字符串并将它们连接在一起,用空格分隔。第二个示例首先转换并连接字符串,然后将整个字符串print作为单个参数传递给。如果您改为这样做print str(k), ",", str(j),您将得到与第一个示例相同的结果。

考虑print函数的工作方式而不是关键字。举个例子:

def foo(*args):
    return ' '.join(map(str, args))

foo('a', 'b', 'c')将传递 foo 3 个参数,然后返回由空格连接的这 3 个参数,'a b c'. foo('a' + 'b' + 'c')将首先创建 string 'abc',然后将其作为单个参数传递给 foo,导致 foo 返回 just 'abc'

于 2012-11-28T21:55:26.520 回答
2

这正是printPython 2 中的工作方式。在 Python 3 中,print更易于配置

完成您想要的更好的方法是使用字符串格式

print '{0},{1}'.format(k, j)

或使用旧式字符串格式:

print '%d,%d' % (k, j)
于 2012-11-28T21:54:49.187 回答
2

就是这样。一个原因可能是为了调试。像世界其他地方的大多数人一样,我经常使用print语句来调试,因为它比使用pdb简短的简单脚本更快更容易。

考虑:

a = 1
b = 2
print a,b

现在这个打印1 2很清楚地表明它与print有 2 个参数的行匹配。(在您的示例中,您第一次传递了 3 个参数,print第二次只传递了 1 个)。print a,b想象一下,如果它给了你,那将是多么的混乱12!您将查看所有代码,试图找出 a 的12来源。当然,正如其他人所指出的,如果您对如何打印内容有更严格的要求,则一种解决方法是使用字符串格式。

于 2012-11-28T22:02:16.913 回答
0

正如其他人指出的那样,主要原因可能是调试。在那张纸条上,看看当你在同一行打印出多个值进行调试时会发生什么:

>>> print myObj1, myObj2
myFirstObj mySecondObj

这样,我不必在为调试目的而打印出来的变量之间打印一个空格,从而使print这种用法变得轻量级。

当然,正如其他人所指出的,你最好使用','.join(myListOfStrings)打印逗号分隔的字符串列表

于 2012-11-28T22:14:36.727 回答