在3.6版本的Python中,關鍵字參數的插入順序現在是guaranteed to be preserved。這可以通過改變dict
對象的基礎表示來實現。現在是否應該保證kwargs.copy()的插入順序? (Python 3.6後)
但是,已經聲明 - somewhat strenuously - 保留dict
對象的命令一般不應該依賴於此。該文檔說明情況是這樣的:
這個新實現的保序方面被認爲是 實現細節並且不應該(在將來這可能 變化的依據,但它需要有在將 語言規範更改爲強制所有當前的 和未來的Python實現的順序保留語義之前,這一新的字典 以少數版本的語言實現;這也有助於保留 向後兼容舊版本的語言,其中 隨機迭代順序仍然有效,例如Python 3.5)。
PEP 468沒有提及複製關鍵字參數的任何內容。但有些時候,不妨一迭代的kwargs
參數的副本(例如同時在for循環變異kwargs
):
def i_will_never_fail(**kwargs):
for thing1,thing2 in zip(kwargs.copy(), kwargs):
assert thing1==thing2
我的問題是:應該從kwargs.copy()
導致的對象的順序來考慮還有保證?或者這也應該被視爲一個實現細節?是OrderedDict
only mostly dead?
相關:https://stackoverflow.com/questions/39980323/dictionaries-are-ordered-in-python-3-6 –