[解決済み] typing.Dictとdictの定義の違い?
質問
Python 3.5で型ヒントを使う練習をしています。私の同僚の一人は
typing.Dict
:
import typing
def change_bandwidths(new_bandwidths: typing.Dict,
user_id: int,
user_name: str) -> bool:
print(new_bandwidths, user_id, user_name)
return False
def my_change_bandwidths(new_bandwidths: dict,
user_id: int,
user_name: str) ->bool:
print(new_bandwidths, user_id, user_name)
return True
def main():
my_id, my_name = 23, "Tiras"
simple_dict = {"Hello": "Moon"}
change_bandwidths(simple_dict, my_id, my_name)
new_dict = {"new": "energy source"}
my_change_bandwidths(new_dict, my_id, my_name)
if __name__ == "__main__":
main()
どちらも問題なく動作し、差はないようです。
を読みました。
typing
モジュールドキュメント
.
の間
typing.Dict
または
dict
プログラムではどちらを使うべきでしょうか?
どのように解決するのですか?
を使用するのとでは、実質的な差はありません。
typing.Dict
と
dict
は、ありません。
しかし
typing.Dict
は
一般的なタイプ
*
キーと値の型を指定することができます。
も
より柔軟に対応できるようになりました。
def change_bandwidths(new_bandwidths: typing.Dict[str, str],
user_id: int,
user_name: str) -> bool:
このように、プロジェクトのある時点で、辞書の引数をもう少し正確に定義したくなることがよくあります。
typing.Dict
から
typing.Dict[key_type, value_type]
を置き換えるよりも「小さな」変更です。
dict
.
これをさらに汎用的にするために
Mapping
または
MutableMapping
を使う必要はありません。
変更する
を使うことにします。
Mapping
. A
dict
は一つのマッピングですが、マッピングのインターフェイスを満たす他のオブジェクトを作成することもできますし、関数もそれらで動作する可能性があります。
def change_bandwidths(new_bandwidths: typing.Mapping[str, str],
user_id: int,
user_name: str) -> bool:
これで、この関数を使う他のユーザーに対して、あなたのコードが実際には
変更する
その
new_bandwidths
のマッピングが渡されます。
あなたの実際の実装は、単に印刷可能なオブジェクトを期待しているだけです。これはテスト用の実装かもしれませんが、現状ではあなたのコードは
new_bandwidths: typing.Any
なぜなら、Pythonのオブジェクトはすべて印刷可能だからです。
*
: 注意:Python3.7以降を使用している場合は
dict
でモジュールを開始すれば、汎用型として使用できます。
from __future__ import annotations
で、Python 3.9の時点では
dict
(他の標準コンテナと同様に)
は、このディレクティブがなくてもジェネリック型として使用することができます。
.
関連
-
[解決済み] 関数デコレータを作成し、それらを連鎖させるには?
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] 0から9までのランダムな整数を生成する
-
[解決済み] リストにおけるdel、remove、popの違いについて
-
[解決済み] リストとタプルの違いは何ですか?
-
[解決済み] なぜdict[key]ではなく、dict.get(key)なのか?
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み】venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenvなどの違いは何ですか?
-
[解決済み】Python2のdict.items()とdict.iteritems()の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
python call matlab メソッドの詳細
-
PicgoのイメージベッドツールをPythonで実装する
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
[解決済み】TypeError: unhashable type: 'numpy.ndarray'.
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない
-
[解決済み] タイピングからリスト/タプル/等を使用する場合と、リスト/タプル/等として直接型を参照する場合について
-
[解決済み】Pythonで変数が辞書であるかどうかを確認する方法は?
-
[解決済み】Pythonは強型付けされていますか?