2017-04-07 3 views
3

So habe ich eine Funktion mit mehreren optionalen Argumente wie folgt:Mehrere optionale Argumente Python

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

Optarg1 & optarg2 sind in der Regel zusammen verwendet werden und wenn diese 2 args angegeben werden dann optarg3 nicht verwendet. Wenn optarg3 angegeben wird, wird optarg1 & optarg2 dagegen nicht verwendet. Wenn es ein optionales Argument wäre, würde es leicht sein, dass die Funktion „wissen“, welches Argument zu verwenden:

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

Meine Frage ist, wie ich „sagen“ die Funktion, die optionale Argument zu verwenden, wenn gibt es optional mehr Argumente und nicht alle von ihnen werden immer angegeben? Parsing die Argumente mit ** Kwargs den Weg zu gehen?

+0

Mögliches Duplikat [Funktion mit optionalen Argumenten?] (Https://stackoverflow.com/questions/9539921/function-with-optional-arguments) –

Antwort

4

** kwargs verwendet wird Python Funktionen übernehmen, eine beliebige Anzahl von Keyword-Argumente zu lassen und then ** entpackt ein Wörterbuch mit Schlüsselwortargumenten. 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

Dies ist die Pythonic Art und Weise, dies zu tun. –

1

Wenn Sie sie im Aufruf der Funktion zuweisen können Sie vorgreifen, welche Parameter Sie nebenbei sind.

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

>>> foo(4) 
4,None,None 
>>> foo(4,c=5) 
4,None,5 
Verwandte Themen