web-dev-qa-db-ja.com

Pythonのタイプヒントを使用してデフォルトのパラメーター値を追加する

このような機能がある場合:

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

そして、パラメータに型ヒントを追加したいのですが、どうすればいいですか?私が仮定した方法では、構文エラーが発生します:

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

以下は構文エラーをスローしませんが、このケースを処理する直感的な方法のようには見えません:

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

typing documentation またはGoogle検索で何も見つかりません。

編集:Pythonでデフォルトの引数がどのように機能するかは知りませんでしたが、この質問のために上記の例を保持します。一般に、次のことを行う方がはるかに優れています。

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

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

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

print(foo.__annotations__)

この出力

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

PEP 484 にリストされていないのは事実ですが、タイプヒントは関数注釈の適用であり、PEP 3107に文書化されています。 構文セクション は、キーワード引数を明確にしますこの方法で関数注釈を処理します。

可変キーワード引数を使用しないことを強くお勧めします。詳細情報 こちら

140

私は最近このワンライナーを見ました:

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

typing (Python 3.5で導入)を使用している場合は、typing.Optionalを使用できます。ここで、Optional[X]Union[X, None]と同等です。 Noneの明示的な値が許可されていることを通知するために使用されます。 typing.Optional から:

def foo(arg: Optional[int] = None) -> None:
    ...
0