2016-04-21 42 views
2

我不明白str.format_map(mapping)方法。我只知道它與str.format(*args, **kwargs)方法類似,您也可以傳遞字典作爲參數(請參閱我的示例)。 例子:str.format_map(映射)和str.format之間的區別是什麼

print ("Test: argument1={arg1} and argument2={arg2}".format_map({'arg1':"Hello",'arg2':123})) 

有人能向我解釋str.format_map(mapping)str.format(*args, **kwargs)方法之間的差異,爲什麼我需要str.format_map(mapping)方法?

+0

我甚至不知道'str.format_map'存在......整潔。 – mgilson

回答

7

str.format(**kwargs)在調用的過程中產生一個新的字典。 str.format_map(kwargs)沒有。除了稍快之外,str.format_map()允許您使用dict子類(或實現映射的其他對象)具有特殊行爲,如正常處理丟失的鍵。當這些項目被複制到一個新的字典時,這種特殊的行爲將會丟失。

參見:https://docs.python.org/3/library/stdtypes.html#str.format_map

+1

奇怪的是,在'** kwargs'處理中實現'format_map'和邊界情況所涉及的變化的組合意味着'str.format(** kwargs)'[實際*將*'通過'dict'子類通過'__missing__ '方法或重寫'__getitem__'行爲並使用它們的行爲](http://ideone.com/Pwi54a)。我認爲所有支持'format_map'的Python版本都是這種情況。不過,這是一個你不應該依賴的實現細節。另外,[只有'format_map'支持非dict-subclasses](http://ideone.com/TXjPyX)。 – user2357112

+1

在早於'format_map'的Python版本上,[你不能以這種方式濫用格式](http://ideone.com/4xREdf)。 – user2357112

相關問題