正如標題所述,這兩個標誌有什麼區別?看來他們都使用repr()將值轉換爲字符串? 此外,在這行代碼中:Python中!r和%r有什麼區別?
"{0!r:20}".format("Hello")
!r前面的0做什麼?
正如標題所述,這兩個標誌有什麼區別?看來他們都使用repr()將值轉換爲字符串? 此外,在這行代碼中:Python中!r和%r有什麼區別?
"{0!r:20}".format("Hello")
!r前面的0做什麼?
%r
在str.format()
格式操作中不是有效的佔位符;它只適用於old-style %
string formatting。它確實通過repr()
函數將對象轉換爲表示形式。
在str.format()
,!r
是等價的,但這也意味着您現在可以使用所有format codes作爲字符串。通常str.format()
將在對象本身上調用object.__format__()
方法,但通過使用!r
,則使用repr(object).__format__()
代替。
還有!s
和(在Python 3中)!a
轉換器;這些首先應用str()
和ascii()
函數。
前面的0
表示將使用str.format()
方法填充該插槽的參數;在你的情況下,位置參數0
是"Hello"
。你可以使用命名爲論證過了,在對象傳遞作爲關鍵字參數:
"{greeting!r:20}".format(greeting="Hello")
除非你正在使用Python 2.6,你可以省略這個因爲沒有索引或名稱自動編號插槽;第一{}
爲0
,第二{}
發生在指數1
第二個參數,等等
謝謝,你能澄清你的意思是「this也意味着你現在可以使用字符串的所有格式代碼「? –
':'冒號後面的代碼被傳遞給'object .__格式的__()'方法,因此是類型特定的。浮點數字接受來自字符串的不同格式化代碼。因此,如果對象是一個浮點數,那麼當你添加'!r'時,你會使用不同的格式化代碼。 –
的0表示「使用0號位置參數」 - 你只需要它,如果你的意思是使用的位置參數之一不止一次或者你需要支持Python 2.6。 ''{} {}「'.format(...)'被自動編號,以便在Python 2.7和3.x中被視爲」{0} {1}「。 – lvc
可能重複的[Python字符串格式:%與.format](http://stackoverflow.com/questions/5082452/python-string-formatting-vs-format) –