2017-05-12 7 views
-2

多くのキーワード引数を持つ関数を使用するプログラムはすべてデフォルトでNoneになり、単なる割り当てよりも良い方法があると考えていました。はるかに短いと書き込みが容易である複数のキーワード引数を1つの値に割り当てることはできますか?

def __init__(self, includes=main=functions=classes=lambdas=variables=values=None): 

のようなものがある

def __init__(self, includes=None, main=None, 
        functions=None, classes=None, 
        lambdas=None, variables=None, 
        values=None): 

あなたが言うことができるように、これはかなり長いと私は期待していた次のとおりです。これは、関数の宣言です。

誰でもこれに回答できますか?それは本当に役立つだろう。

+0

少なくとも私はそれを見たことがないとは思わない – TallChuck

+3

これは '** kwargs **'を使う方が良い時期です。 –

+0

構文的にはできません。関数のキーワード引数は、 'name = value'の形式を取る一連の' keyword_items'で構成されています。 –

答えて

2

これは、あなたが実際に**kwargsを好むべきであるとコメントしたと言いました。関数に渡したすべての名前付き引数をキャッチする辞書です。

def __init__(self, **kwargs): 
    if includes in kwargs: 
     do_something() 
    if main in kwargs: 
     do_something_else() 
    ... 

ハンドル各引数と同じあなたは、通常、この使用したい方法:あなたがについて尋ねてきた何

if includes is not None: 
    do_something() 
if main is not None: 
    do_something_else() 
... 

が構文的に不可能ですが(そして何も同様のここであなたがそれを使用したい方法ですが存在する)が、これは同じセマンティックの結果を達成する。

3

あなたは間違いなく構文エラーです。

代わりに**kwargsを使用することを検討してください。@aryamccarthyが示唆しているとおりです。

def foo(**kwargs): 
    known_args = set(['pizza', 'burger', 'sausage']) 
    extra_args = set(kwargs) - known_args 
    if extra_args: 
    raise ValueError('Unknown argument names: %r' % extra_args) 
    # proceed as normal 
0

あなたは新しい変数がNoneに等しくなるように設定してから、その使用することができます:

あなたが欲しいあなたが名前だけを受け入れることを確認することができます大幅に短くなり

a = None 
def __init__(self, includes=a, main=a, functions=a, classes=a, lambdas=a, variables=a, values=a): 

を、そうでなければ、それは不可能ではありません。

関連する問題