2013-07-08 10 views
6

Ich habe eine Funktion, bei der ich basierend auf einem anderen Fall die Parameter an eine Funktion ändere, deren Ergebnis ich zurücksende. Ich möchte nur Parameter in der Mitte der Methode entscheiden, und nur einen Rückruf am Ende meiner Funktion haben. Bitte beachten Sie, dass dies nicht mein Code ist, es ist nur ein Beispiel. Ich benutze Django, wenn das relevant ist.Speichern von Python-Funktionsparametern als Variable zum späteren Aufruf

if x: 
    return func(param1, param2, param3) 
elif y: 
    return func(param4, param5, param6) 
elif z: 
    return func(param7, param8, param9) 

Ich möchte diese

if x: 
    parameters = (param1, param2, param3) 
elif y: 
    parameters = (param4, param5, param6) 
elif z: 
    parameters = (param7, param8, param9) 
return func(parameters) 

Danke für die Hilfe lesen!

Antwort

4

Verwenden *-unpack the parameter tuple:

func(*parameters) 

Demo:

def func(x,y,z): 
    print x,y,z 
>>> params = (1,2,3) 
>>> func(*params) 
1 2 3 
>>> params = (4,5,6) 
>>> func(*params) 
4 5 6 
4

Just do

return func(*parameters)

Es entpackt die Parameter und übergibt es an die func. Lesen Sie hierzu den Eintrag Python Docs.

Zum Beispiel -

>>> def test(a, b, c): 
     print a, b, c 


>>> testList = [2, 3, 4] 
>>> test(*testList) 
2 3 4 

Ihr Code würde jetzt lesen -

if x: 
    parameters = (param1, param2, param3) 
elif y: 
    parameters = (param4, param5, param6) 
elif z: 
    parameters = (param7, param8, param9) 
return func(*parameters) 
+0

Danke für die Hilfe; Ich schätze es. – Brandon

0

kann man einfach nicht

tun
return func(parameters[0], parameters[1], parameters[2]) 

?

1

Es gibt einen pythonic Ansatz dazu, die Art recht ist:

paramDictionary = { x : (param 1, param 2, param 3), y : (...), z:(...) } 
return func(*paramDictionary[ indicator ]) 

Dieser neigt dazu, in Python ordentlicheres Code. Du verwendest immer noch das *, um deine Variablen zu entpacken, aber du brauchst keine weitläufigen Zeilen mit if-Anweisungen!

Verwandte Themen