2

これは簡単な質問かもしれません:

次の2つの間に違いはありますか?

def myfunc(a_list = [], **kwargs):
    my_arg = kwargs.get('my_arg', None)
    pass

def myfucn(a_list = [], my_arg = None):
    pass

そうでない場合、どちらがよりpythonicと見なされますか?

ありがとう、-マット

4

3 に答える 3

7

単純な関数の場合、引数を明示的に定義する方がPythonicです。未知の引数または可変の引数をいくつでも受け入れるという正当な要件がない限り、この**kwargsメソッドは不必要な複雑さを追加します。

ボーナス:関数定義でリストを初期化しないでください!リストは変更可能であるため、これが持続することにより、予期しない結果が生じる可能性があります。

于 2011-04-14T18:36:47.833 に答える
1

最初の引数は、提供された実質的にすべてのキーワード引数を取ることができます(1つだけを使用するという事実に関係なく)が、2番目の引数は2つしか取ることができません。どちらもPythonicではなく、タスクに適したものを使用するだけです。

また、2つ目は「キーワード引数」ではなく、「デフォルト値」です。

于 2011-04-14T18:34:51.933 に答える
1

2番目の方法では、my_argをキーワード引数ではなく位置引数として渡すことができます。**kwargs実際に何にも使用しないときに宣言するのは非Python的だと思います。

于 2011-04-14T18:39:12.073 に答える