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でも機能します。Python 3でデフォルトの引数を後ろ *args
に置くと、位置ではなく名前でのみ指定できる「キーワードのみ」の引数になります。Python 2でキーワードのみの引数が必要な場合は、@ mgilsonのソリューションを使用できます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加