web-dev-qa-db-ja.com

複数のオプション引数python

だから私はそのようないくつかのオプションの引数を持つ関数を持っています:

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

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

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

私の質問は、複数のオプション引数があり、それらのすべてが常に指定されているわけではないときに、どのオプション引数を使用するかを関数に「伝える」方法です。 ** kwargsで引数を解析する方法はありますか?

6
e9e9s

** kwargsは、Python関数に任意の数のキーワード引数を取らせ、**キーワード引数の辞書を解凍するために使用されます。 詳細はこちら

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!
10
devautor

関数の呼び出しでそれらを割り当てる場合は、渡すパラメーターをプリエンプトできます。

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

>>> foo(4) 
4,None,None
>>> foo(4,c=5)
4,None,5
6
corn3lius