[解決済み] タイプヒンティングを使用しているとき、関数にデフォルトのパラメータを追加するにはどうすればよいですか?
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で文書化されています。 シンタックスセクション は、キーワード引数がこのように関数アノテーションと連動することを明確にしています。
ミュータブルキーワード引数の使用を強くお勧めします。より詳しい情報 こちら .
関連
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] タイプヒントを使用して複数の戻り値の型を指定する方法
-
[解決済み】メソッドの型ヒントは、どのようにエンクロージャクラスの型を使用するのですか?
-
[解決済み】周期的インポートを使用しないPythonのタイプヒンティング
-
[解決済み】タイプヒンティング使用時にNULL引数を渡せない
-
[解決済み】指定された型のコレクションをタイプヒンティングする
-
[解決済み】PyLintメッセージ:logging-format-interpolation
-
[解決済み] タイプヒンティングのサブクラス
最新
-
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コードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数