私はこのようなことをする必要があります:
def func1(a, *args, b="BBB", **kwargs):
print "a=%s b=%s args=%s kwargs=%s" % (a, b, args, kwargs)
したがって、このように呼び出す:
func1("AAAA", h="HHH", j="JJJ")
出力を生成します:
a=AAAA b=BBB args=() kwargs={'h': 'HHH', 'j': 'JJJ'}
ただし、デフォルトの名前付き引数をの後に置くことはできません*args
。(SyntaxError: invalid syntax
)
- なぜこれが許可されないのですか?
- これを実装するための読みやすい方法はありますか?私が知っている唯一の方法はです
b=kwargs.pop("b", "BBB")
が、これはあまり読みやすくありません。これは、それが属する関数呼び出し定義に含めることをお勧めします。これは、デフォルト値またはユーザー指定の値のいずれかの値を常に持つパラメーターです。
編集
私はb
前に置くことができargs
ます:
def func1(a, b="BBB", *args, **kwargs):
print "a=%s b=%s args=%s kwargs=%s" % (a, b, args, kwargs)
しかし、それはこの呼び出しを意味します:
func1("AAAA", "CCC", h="HHH", j="JJJ")
に割り当てます"CCC"
がb
、これは必要ありません。b
位置引数ではなく、名前付き引数になりたいです。