37

Python では、次のことができます。

def myFun1(one = '1', two = '2'):
    ...

次に、関数を呼び出して、引数を名前で渡すことができます。

myFun1(two = 'two', one = 'one')

また、これを行うことができます:

def myFun2(**kwargs):
    print kwargs.get('one', 'nothing here')

myFun2(one='one')

だから私は、次のような両方の方法を組み合わせることが可能かどうか疑問に思っていました:

def myFun3(name, lname, **other_info):
    ...

myFun3(lname='Someone', name='myName', city='cityName', otherInfo='blah')

一般的に、どのような組み合わせができますか?

私のばかげた質問に感謝し、申し訳ありません。

4

3 に答える 3

40

一般的な考え方は次のとおりです。

def func(arg1, arg2, ..., kwarg1=default, kwarg2=default, ..., *args, **kwargs):
    ...

それらはいくつでも使用できます。*andは、**他の方法で説明されていない残りの値を「吸収」します。

位置引数 (デフォルトなしで提供される) をキーワードで指定することはできず、デフォルト以外の引数をデフォルト引数に続けることはできません。

Python 3 では、キーワードのみの引数を の後に指定する機能も追加されています*

def func(arg1, arg2, *args, kwonlyarg=default):
    ...

*単独で ( ) を使用することもできますdef func(a1, a2, *, kw=d):。つまり、引数はキャプチャされませんが、その後はすべてキーワードのみになります。

したがって、3.x を使用している場合は、次のようにして必要な動作を生成できます。

def myFun3(*, name, lname, **other_info):
    ...

これにより、キーワードのみでnameand asを呼び出すことができます。lname

これは通常とは異なるインターフェイスであり、ユーザーにとっては煩わしいかもしれないことに注意してください。

2.x では、これを手動で解析して作成する必要があります**kwargs

于 2013-02-25T19:27:35.700 に答える