1. ホーム
  2. python

[解決済み] タイプヒンティングを使用しているとき、関数にデフォルトのパラメータを追加するにはどうすればよいですか?

2022-03-20 16:48:16

質問

このような関数があった場合。

def foo(name, opts={}):
  pass

そして、パラメータにタイプヒントを付けたいのですが、どうすればいいのでしょうか?私が想定した方法では、シンタックス・エラーが発生します。

def foo(name: str, opts={}: dict) -> str:
  pass

以下はシンタックスエラーを投げませんが、このケースを処理する直感的な方法とは思えません。

def foo(name: str, opts: dict={}) -> str:
  pass

には何も書かれていませんね。 typing ドキュメント またはGoogleで検索してください。

編集:Pythonでデフォルトの引数がどのように機能するのか知りませんでしたが、この質問のために、上記の例のままにしておきます。一般的には以下のようにするのがずっといいと思います。

def foo(name: str, opts: dict=None) -> str:
  if not opts:
    opts={}
  pass

解決方法は?

2番目の方法が正しいです。

def foo(opts: dict = {}):
    pass

print(foo.__annotations__)

この出力は

{'opts': <class 'dict'>}

に掲載されていないのは事実です。 PEP 484 しかし、タイプヒントは関数アノテーションの応用であり、それはPEP 3107で文書化されています。 シンタックスセクション は、キーワード引数がこのように関数アノテーションと連動することを明確にしています。

ミュータブルキーワード引数の使用を強くお勧めします。より詳しい情報 こちら .