python的許多方面似乎只是功能的重複。除了我在Python中的kwargs和dict中看到的冗餘之外是否還有一些差異?Python 3.2中的kwargs和dict有什麼區別?
10
A
回答
8
有作爲的論據之一拆包在參數的差異(其中許多人使用kwargs
)和通過dict
:
使用參數拆包:
# Prepare function def test(**kwargs): return kwargs # Invoke function >>> test(a=10, b=20) {'a':10,'b':20}
傳遞的字典爲一個參數:
# Prepare function def test(my_dict): return my_dict # Invoke function >>> test(dict(a=10, b=20)) {'a':10,'b':20}
的區別主要是:
- 可讀性(你可以簡單地通過關鍵字參數,即使他們沒有明確定義),
- 靈活性(可以明確地支持一些關鍵參數,並使用
**kwargs
休息) , - 參數拆包可以幫助你避免「含有」的觀點(這是不那麼重要,因爲Python的一般假設開發人員知道他們在做什麼,這是一個不同的主題)的對象意想不到的變化,
+4
隨着解壓縮,密鑰需要有效的標識符 –
+0
@gnibbler:你說得對,+1。我完全錯過了。作爲一個例子,我會給'test({0:10,'0':20})(這會返回'{0:10,'0':20}'),這很難用參數解包來替換。 – Tadeck
3
這是正確的,在大多數情況下,你可以交換字典和** kwargs。
例如:
my_dict = {'a': 5, 'b': 6}
def printer1(adict):
return adict
def printer2(**kwargs):
return kwargs
#evaluate:
>>> printer1(my_dict)
{'a': 5, 'b': 6}
>>> printer2(**my_dict)
{'a': 5, 'b': 6}
用,如果你與其他參數結合起來,你有更多的靈活性kwargs
但是:
def printer3(a, b=0, **kwargs):
return a,b,kwargs
#evaluate
>>> printer3(**my_dict)
(5, 6, {})
相關問題
- 1. * args,** kwargs與用tuple和dict調用有什麼區別?
- 2. Python 3.2和3.1有什麼區別?
- 3. UserDict和Dict有什麼區別嗎?
- 4. struct和dict有什麼區別?
- 5. dict,collections.defaultdict,collections.OrderedDict,collectinos.UserDict有什麼區別?
- 6. dict(映射,** kwargs)vs dict(可迭代,** kwargs)
- 7. d.update(dict(a = 1,b = 2))和d.update(dict('a'= 1,'b'= 2)之間有什麼區別)
- 8. python中的{}和[]有什麼區別?
- 9. Python中pycurl和curl有什麼區別
- 10. python中b''和''有什麼區別?
- 11. Python中!r和%r有什麼區別?
- 12. active python和python有什麼區別?
- 13. Python的__add__和__concat__有什麼區別?
- 14. Python的ElementTree.XML()和ElementTree.fromstring有什麼區別?
- 15. Python的pyautogui.PAUSE和time.sleep有什麼區別?
- 16. 的Python:有什麼區別 - ABS和operator.abs
- 17. 有什麼區別`和$(Bash中有什麼區別?
- 18. Python,Shapely:Polygon.contains和Polygon.within有什麼區別?
- 19. Django和Python有什麼區別?
- 20. python mock和magic mock有什麼區別?
- 21. django classonlymethod和python classmethod有什麼區別?
- 22. opencv,python-opencv和libopencv有什麼區別?
- 23. pytz和python-dateutil有什麼區別?
- 24. Python:'is'和'=='有什麼區別?
- 25. PyCUDA和NumbaPro CUDA Python有什麼區別?
- 26. .NET double和python float有什麼區別?
- 27. Python:__builtin__和__builtins__有什麼區別?
- 28. 「python scriptname.py」和「scriptname.py」有什麼區別?
- 29. java HttpsURLConnection和python HTTPSConnection有什麼區別?
- 30. clang和clang-mp-3.3(3.2或3.4)有什麼區別?
'** kwargs'隱式創建* A *'dict'對象(由'kwargs'命名)加載鍵和值。這不是重複的功能。 – 2012-05-08 00:40:49
展開「許多方面」。還有哪些地方是重複功能? – jdi