2010-08-20 10 views
16

Betrachten Sie die folgende Funktion, die in Python nicht funktioniert, aber ich werde erklären, was ich tun muss.Den Standardwert einer Funktionseingabe auf eine andere Eingabe in Python setzen

def exampleFunction(a, b, c = a): 
    ...function body... 

Das heißt ich Variable c den gleichen Wert zuweisen möchten, dass variable a würde, es sei denn, ein anderer Wert angegeben wird. Der obige Code funktioniert nicht in Python. Gibt es eine Möglichkeit, dies zu tun?

Vielen Dank.

Antwort

22
def exampleFunction(a, b, c = None): 
    if c is None: 
     c = a 
    ...function body... 

Der Standardwert für das Schlüsselwort Argument kann keine Variable sein (wenn es ist, es auf einen festen Wert umgesetzt ist, wenn die Funktion definiert ist.) Häufig verwendete Argumente an eine Hauptfunktion passieren:

def main(argv=None): 
    if argv is None: 
     argv = sys.argv 
+0

Genau. Standard-Argumente werden in Stein gemeißelt, sobald die Funktion definiert ist. – delnan

+0

@delnan Ist das der Grund, warum das nicht-voreingestellte Set-Argument am letzten wie 'def (x = 2, y)' nicht liefern kann, muss ich stattdessen die Funktion def def (y, x = 2) 'definieren? – SIslam

1

Ein Ansatz ist so etwas wie:

def foo(a, b, c=None): 
    c = a if c is None else c 
    # do something 
13

Dieses allgemeine Muster ist wahrscheinlich die beste und lesbar:

def exampleFunction(a, b, c = None): 
    if c is None: 
     c = a 
    ... 

Sie müssen darauf achten, dass None kein gültiger Status für c ist.

Wenn Sie ‚Keine‘ Werte zu unterstützen, können Sie etwas tun:

def example(a, b, *args, **kwargs): 
    if 'c' in kwargs: 
     c = kwargs['c'] 
    elif len(args) > 0: 
     c = args[0] 
    else: 
     c = a 
+2

+1 für die Erwähnung, dass 'None' kein gültiger Zustand für' c' sein kann, damit der 'c = None'-Trick funktioniert. – aaronasterling