2016-04-10 7 views
-1

Ich möchte eine Python-Funktion definieren, in der ein Parameter extern ist, wenn es beim Aufruf der Funktion deklariert wird und es intern ist nicht in der Funktionsaufruf erwähnt. Ein einfaches Beispiel wird meine Frage klären:Python-Funktion, in der ein Parameter ist extern wenn erwähnt oder intern, wenn es nicht erwähnt

def func(a, b): 
    c = 4 
    try: 
     b 
    except: 
     b= c 
    return a + b 

Jetzt möchte ich etwas, in dem ich

func(2, 1) 

und geben Sie mir das Ergebnis (2 + 1 = 3) schreiben kann, und ich kann sogar schreiben

func(2) 

und die Funktion wird eine Lösung erzeugen, c + a = 6.

Wie kann ich das tun?

+1

Randnotiz: ** Niemals ** ein blankes 'except:' verwenden. Geben Sie die Ausnahme an, die Sie abfangen möchten: 'except ValueError', oder' except NameError' usw. Sonst werden Sie * alles * blockieren, einschließlich Störsignalen oder Speicherfehlern, die Sie * nie * fangen sollten, da Sie wirklich kann nicht wirklich mit ihnen umgehen. – Bakuriu

Antwort

3

Sie beschreiben ein Standardargument. Python bedeutet das für Sie (see the docs):

def func(a, b=4): 
    return a + b 

Alternativ kann, wenn mehr Logik beteiligt ist, möchten Sie vielleicht prüfen:

def func(a, b=None): 
    if b is None: 
     try: 
      b = fancy_function() 
     except FancyException: 
      b = 4 
    return a + b 

Das gleiche gilt für veränderbare Standardwerte:

def func(a, b=None): 
    if b is None: 
     b = [] 
    b.append(a) 
    return b 
2

Schreiben Sie einfach

def func(a, b=4): 
    return a + b 

>>> func(2) 
6 
>>> func(2, 1) 
3 

Wenn der Standardwert von b vorher nicht bekannt ist, können Sie folgendes tun:

def func(a, b=None): 
    if b is None: 
     b = some_function_that_generates_b() 
    return a + b 
+0

Das Problem ist, dass in meinem Fall b aus dem Öffnen einer Datei und dem Verarbeiten der darin enthaltenen Daten in die Funktion generiert werden kann. Ich würde also etwas bevorzugen, das sagt: "Wenn b in die Funktion calling deklariert wird, dann benutze diese Task und erzeuge b von innen" –

Verwandte Themen