我只是發現了一些奇怪的爲什麼控制檯有空間時,它打印蟒蛇
在蟒蛇,如果我這樣做
>>> k = 1
>>> j = 2
>>> print k,",",j
1 , 2 # prints this
我預計,這將是:
1,2
爲什麼這兩者之間有空間,而
>>> print str(k) + "," + str(j)
1,2
謝謝
我只是發現了一些奇怪的爲什麼控制檯有空間時,它打印蟒蛇
在蟒蛇,如果我這樣做
>>> k = 1
>>> j = 2
>>> print k,",",j
1 , 2 # prints this
我預計,這將是:
1,2
爲什麼這兩者之間有空間,而
>>> print str(k) + "," + str(j)
1,2
謝謝
第一個例子直接傳遞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'
。
這只是print
在Python 2中的工作方式。在Python 3中,print是more configurable。
一種更好的方式來完成你想要的是使用string formatting:
print '{0},{1}'.format(k, j)
還是用老式的字符串格式化:
print '%d,%d' % (k, j)
就是這樣。一個原因可能是調試。與世界其他地區的大多數人一樣,我經常使用print
語句進行調試,因爲它比使用pdb
簡短腳本更快更容易。
考慮:
a = 1
b = 2
print a,b
現在這個打印1 2
這使得它很清楚,它與一條線在那裏print
有2個參數相匹配。 (在你的例子中,你首次傳遞3個參數給print
,第二次傳遞1個參數)。想象一下,如果print a,b
給你12
會是多麼的迷惑!你會看遍你的代碼,試圖找出12
來自哪裏。當然,正如其他人所指出的那樣,如果您對如何打印文件有更嚴格的要求,那麼一種解決方法是使用字符串格式。
正如其他人指出的,主要原因可能是調試。關於這一點,看看當你打印出在同一行多個值用於調試發生了什麼:
>>> print myObj1, myObj2
myFirstObj mySecondObj
這樣,我就不必打印我打印出來用於調試目的變量之間的空間,因此這種用法使得輕量級print
。
當然,正如其他人所指出的,你最好不要使用','.join(myListOfStrings)
打印逗號分隔字符串
這真的是越來越關於接受可變長度參數列表功能的問題,也包含字符串格式化的列表。 –