2013-02-07 44 views
24

我終於從%切換到我的2.x代碼中的.format()字符串格式化運算符,以便將來更容易遷移到3.x。發現不僅%風格的格式保留在Py3中,而且在標準庫代碼中被廣泛使用,這有點令人驚訝。這似乎是合乎邏輯的,因爲編寫'(%s)' % variable'({})'.format(variable)短一些,可能更容易理解。但我仍然懷疑。在代碼中使用兩種方法是否合適(pythonic?)? 謝謝。Python 3:使用%s和.format()

+0

'%'格式化速度稍快。但是,如果你正在做很多重要的字符串格式,那麼你可能還有其他更重要的問題。 –

回答

24

Python 3.2文檔說,%最終會消失。

http://docs.python.org/3.2/tutorial/inputoutput.html#old-string-formatting

由於str.format()是相當新的,大量的Python代碼仍然使用% 操作。但是,由於這種舊格式的格式最終將從語言中刪除,因此str.format()應該一般應使用 。

但作爲@regilero says句子是從3.3消失了,這可能表明,它實際上並不是這樣。有一些對話here表明同樣的事情。

作爲Python 3.4 the paragraph 7.1.1讀取:

%運算符也可用於字符串格式。它將 左邊的參數解釋爲很像sprintf()樣式的格式字符串,將 應用於正確的參數,並返回 此格式操作產生的字符串。

參見Python 3.4 4.7.2 printf-style String Formatting.

+0

非常感謝你回覆,弗拉德。事實上,他們說在文檔中,但即使是3.x的標準庫也充斥着類似'%'的格式:(看起來根本沒有那麼多從'%'擺脫的跡象。無論如何,堅持'.format()'看起來不錯:) –

+3

這個句子已經在python 3.3文檔中被刪除了,它仍然在3.2 http://docs.python.org/3.2/tutorial/inputoutput.html#old-string -formatting – regilero

+0

這是個好消息! – Jon

-2

「%s」 爲現在的 「{}」,所以insted的添加%s與替換它的{},你會想將變量添加到字符串。

def main(): 
    n="Python 3.+" 
    l="looks nice" 
    f="does not look practical." 


    print("This seems to be the new way {}".format(n)\ 
     + "will be working, rather than the ' % ',{} but {}".format(l,f)) 



main() 

#In comparison to just injecting the variable 

輸出無視他們是爲了說明原因

引號「這似乎是新路‘的Python 3 +’ 會工作,而不是「%;,‘看起來不錯’但「看起來不太實際」。「

+5

爲此答案添加一些解釋。 – Andrei

相關問題