2012-03-29 11 views
2

これらの2つのメソッド呼び出しのうち、どちらが最もPythonicと考えられますか?Pythonic引数の受け渡し

some_method(that_has, very_many, aurguments=None, of_different=None, 
      kinds=u'', and_importance=None, spanning=u'multple lines'): 

または

個人的に
method_args = { 
    u'first_arg' : that_has, 
    u'second_arg' : very_many, 
    u'arguments' : None, 
    u'of_different' : None, 
    u'kinds' : u'', 
    u'and_importance' : None, 
    u'spanning' : u'multiple lines' 
} 
some_method(**method_args) 

が1行に収まる場合は、最初は、私はかなり確かではない午前二行のために、2つの以上の行と最初の道にまたがるとき、私は2番目を好みます。

編集:渡された引数は、私の例のように短く静的ではないかもしれないが、かなり長い名前である可能性が高い。

答えて

2

このような静的呼び出しの場合は、上記のPythonicが多くなります。あなたは(と一部の人が実際にこれを行う)したい場合は、このようにそれを揃えることができます。

some_method(
    that_has, 
    very_many, 
    arguments=None, 
    of_different=None, 
    kinds=u'', 
    and_importance=None, 
    spanning=u'multple lines' 
) 

はまた、あなたの第二の方法でも動作しないことに注意してください - それは唯一のさえないかもしれない引数に(キーワード引数を渡しますキーワード)。

+0

私の怠惰はそれを少し不明瞭にしているかもしれませんが、私が心に留めていたのは、このような静的ではない一般的なケースです。 –

+0

@ ib.lundgren: – orlp

+0

しかし、コンセプトは機能します。位置的な引数には別々のタプルが必要です。 – agf

0

もっと読みやすいものは何でも。

あなたが関数の引数のための複雑さの一定のレベルに達すると、それは実際にこれらの引数をカプセル化するクラスを定義する価値があることができます。

args = SomeMethodArgs() # custom args class for the some_method func 

args.x = 2 
args.y = "a string" 
args.z = None 
args.items = [a, b, c] 

some_method(args) 

これは、あなたが引数の数を変更することができるという利点を持っていますまたは署名を後で最小限の担保効果で1か所で行うことができます。

関連する問題