2012-11-28 126 views
2

我只是發現了一些奇怪的爲什麼控制檯有空間時,它打印蟒蛇

在蟒蛇,如果我這樣做

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

我預計,這將是:

1,2 

爲什麼這兩者之間有空間,而

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

謝謝

回答

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')將首先創建字符串'abc',然後將其作爲單個參數傳遞給foo,從而導致foo僅返回'abc'

2

這只是print在Python 2中的工作方式。在Python 3中,print是more configurable

一種更好的方式來完成你想要的是使用string formatting

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

還是用老式的字符串格式化:

print '%d,%d' % (k, j) 
+0

這真的是越來越關於接受可變長度參數列表功能的問題,也包含字符串格式化的列表。 –

2

就是這樣。一個原因可能是調試。與世界其他地區的大多數人一樣,我經常使用print語句進行調試,因爲它比使用pdb簡短腳本更快更容易。

考慮:

a = 1 
b = 2 
print a,b 

現在這個打印1 2這使得它很清楚,它與一條線在那裏print有2個參數相匹配。 (在你的例子中,你首次傳遞3個參數給print,第二次傳遞1個參數)。想象一下,如果print a,b給你12會是多麼的迷惑!你會看遍你的代碼,試圖找出12來自哪裏。當然,正如其他人所指出的那樣,如果您對如何打印文件有更嚴格的要求,那麼一種解決方法是使用字符串格式。

0

正如其他人指出的,主要原因可能是調試。關於這一點,看看當你打印出在同一行多個值用於調試發生了什麼:

>>> print myObj1, myObj2 
myFirstObj mySecondObj 

這樣,我就不必打印我打印出來用於調試目的變量之間的空間,因此這種用法使得輕量級print

當然,正如其他人所指出的,你最好不要使用','.join(myListOfStrings)打印逗號分隔字符串