2017-04-07 4 views
3

だから私はそうのようないくつかのオプションの引数を持つ関数があります。複数のオプションの引数のpython

def func1(arg1, arg2, optarg1=None, optarg2=None, optarg3=None): 

Optarg1 & optarg2を一緒にして使用されていないoptarg3これら2つの引数が指定されている場合に使用通常です。対照的に、optarg3が指定されている場合、optarg1 & optarg2は使用されません。それは1つのオプションの引数であれば関数は、引数を使用するかを「知る」ことが簡単になるだろう:

if optarg1 != None: 
    do something 
else: 
    do something else 

私の質問は、複数のオプションがあるとき、私は、オプションの引数は、使用する機能を「伝える」する方法です引数はすべて指定されているわけではありませんか? ** kwargsと引数を解析すると、行く方法はありますか?

+0

の可能性のある重複した[オプションの引数を持つ関数?](https://stackoverflow.com/questions/9539921/function-with-optional-arguments) –

答えて

4

** kwargsからのPython関数はキーワード引数の任意の数をみましょうするために使用され、 **キーワード引数の辞書をアンパックします。 Learn More here

def print_keyword_args(**kwargs): 
    # kwargs is a dict of the keyword args passed to the function 
    print kwargs 
    if("optarg1" in kwargs and "optarg2" in kwargs): 
     print "Who needs optarg3!" 
     print kwargs['optarg1'], kwargs['optarg2'] 
    if("optarg3" in kwargs): 
     print "Who needs optarg1, optarg2!!" 
     print kwargs['optarg3'] 

print_keyword_args(optarg1="John", optarg2="Doe") 
# {'optarg1': 'John', 'optarg2': 'Doe'} 
# Who needs optarg3! 
# John Doe 
print_keyword_args(optarg3="Maxwell") 
# {'optarg3': 'Maxwell'} 
# Who needs optarg1, optarg2!! 
# Maxwell 
print_keyword_args(optarg1="John", optarg3="Duh!") 
# {'optarg1': 'John', 'optarg3': 'Duh!'} 
# Who needs optarg1, optarg2!! 
# Duh! 
+0

これは、これを行う最もPython的な方法です。 –

1

あなたはあなたがに渡しているパラメータ優先使用を事前にすることができ、関数の呼び出しでそれらを割り当てた場合。

def foo(a, b=None, c=None): 
    print("{},{},{}".format(a,b,c)) 

>>> foo(4) 
4,None,None 
>>> foo(4,c=5) 
4,None,5 
関連する問題