Pythonの多くの側面は単に機能の重複しているようです。 Pythonでkwargsとdictで見ている冗長性を超えて、いくつかの違いがありますか?Python 3.2の** kwargsとdictの違いは何ですか?
10
A
答えて
8
引数の違い開梱(多くの人がkwargs
を使用する場合)および引数の1つとして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。私はそれを完全に逃した。例として、{(0:10、 '0':20}) '(' {0:10、 '0':20} 'を返す)' 'test 'を与えて、引数を解凍するのは難しい。 – Tadeck
3
ほとんどの場合、dictsと** 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. "[dict()] * n"と "forappend(dict())"を伴うforループの違いは何ですか?
- 3. 'return dict(result)'と 'return {"result":result}の違いは何ですか?
- 4. Pythonの規約とは何ですか?kwargs vs ** kwds vs ** kw?
- 5. dict、collections.defaultdict、collections.OrderedDict、collectinos.UserDictの違いは何ですか?
- 6. A`と ``の違いは何ですか[:] `
- 7. Python dictの__hash__と__eq__評価の順序は何ですか?
- 8. str(dict)とjson.dumps(dict)の違い
- 9. パッケージのインポートobjと何かの違いをインポートパッケージとPythonの何かの違いは何ですか?
- 10. Python 3.2でcsv(dict)リーダーオブジェクトをチャンクする方法は?
- 11. Pythonの__getattribute__とobj .__ dict __ ['x']の違いは?
- 12. python 2とpython 3の違いは何ですか?
- 13. アクティブなpythonとpythonの違いは何ですか?
- 14. Pythonでは、パスとリターンの違いは何ですか
- 15. ;で終わるPythonのステートメントとの違いは何ですか?
- 16. .NET doubleとpython floatの違いは何ですか? C#ので
- 17. redisのdict実装で安全/非安全dict itereatorの違いは何ですか?
- 18. Python対JythonとIronPythonとwxPythonの違いは何ですか?
- 19. Python classmethods:インスタンスのメンバとクラスのメンバの違いは何ですか? Pythonでは
- 20. Pythonのリテラルと変数の違いは何ですか?
- 21. pythonのrandom.normalvariate()とrandom.gauss()の違いは何ですか?
- 22. pythonのftp.dir()とftp.retrlines( 'LIST')の違いは何ですか?
- 23. Pythonのstr.join()とstr()。join()の違いは何ですか?
- 24. pythonの範囲とxrangeの違いは何ですか?
- 25. Pythonの "2 * 2"と "2 ** 2"の違いは何ですか?
- 26. pythonのheapqとPriorityQueueの違いは何ですか?
- 27. Pythonのthreading.active_count()とthreading.activeCount()の違いは何ですか?
- 28. Pythonプロジェクトのsetup.pyとsetup.cfgの違いは何ですか?
- 29. Python文法のTrueとFalseの違いは何ですか?
- 30. PythonマルチプロセッシングモジュールのThreadPoolとPoolの違いは何ですか?
'** kwargs'は、暗黙的に(*' dict'オブジェクトを作成しますキーと値がロードされた '' kwargs'')これは重複した機能ではありません。 –
「多くの側面」で展開します。重複する機能の他の領域は何ですか? – jdi