[解決済み] args と **kwargs を使ったデフォルトの引数。
2023-02-27 12:17:37
質問
質問
Python 2.x
(私は 2.7 を使っています) でデフォルトの引数を使うにはどちらが適切でしょうか?
*args
と
**kwargs
?
このトピックに関連する質問をSOで見つけたのですが、それは
Python 3
:
args,**kwargsとオプション/デフォルト引数でPython関数を呼び出す
そこでは、この方法が有効だそうです。
def func(arg1, arg2, *args, opt_arg='def_val', **kwargs):
#...
2.7では、結果的に
SyntaxError
. このような関数を定義するために推奨される方法はありますか?
私はこの方法でそれを動作させたが、私はより良いソリューションがあると思います。
def func(arg1, arg2, *args, **kwargs):
opt_arg ='def_val'
if kwargs.__contains__('opt_arg'):
opt_arg = kwargs['opt_arg']
#...
どのように解決するのですか?
の前にデフォルトの引数を置くだけです。
*args
:
def foo(a, b=3, *args, **kwargs):
今すぐ
b
はキーワード引数か第2位置引数で渡すと、明示的に設定されます。
例を挙げます。
foo(x) # a=x, b=3, args=(), kwargs={}
foo(x, y) # a=x, b=y, args=(), kwargs={}
foo(x, b=y) # a=x, b=y, args=(), kwargs={}
foo(x, y, z, k) # a=x, b=y, args=(z, k), kwargs={}
foo(x, c=y, d=k) # a=x, b=3, args=(), kwargs={'c': y, 'd': k}
foo(x, c=y, b=z, d=k) # a=x, b=z, args=(), kwargs={'c': y, 'd': k}
特に注意してほしいのは
foo(x, y, b=z)
が機能しないのは
b
は位置によって割り当てられるからです。
このコードはPython 3でも動きます。デフォルトのアーギュメントである
の後に
*args
は、Python 3 ではキーワードのみの引数として扱われ、以下のことが可能です。
だけです。
を位置ではなく名前で指定できるようになりました。Python 2 でキーワードのみの引数を指定したい場合は、@mgilson の
解決策
.
関連
-
[解決済み] 関数デコレータを作成し、それらを連鎖させるには?
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み] Pythonの要素別タプル演算(sumなど
-
[解決済み] 単純な文字列からtimedeltaオブジェクトを作成する方法
-
[解決済み] djangoのQueryDictをPythonのDictに変更するには?
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SQLAlchemy: セッションの作成と再利用
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] dict を txt ファイルに書き、それを読み取る?
-
[解決済み] Python 2.7サポート終了?
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] djangoのQueryDictをPythonのDictに変更するには?
-
[解決済み] Django filter queryset __in for *every* item in list