2013-07-08 5 views
6

Ho una funzione in cui, in base a casi diversi, sto modificando i parametri inviati a una funzione il cui risultato sto restituendo. Mi piacerebbe solo decidere i parametri nel mezzo del metodo, e ho solo una chiamata di ritorno nella parte inferiore della mia funzione. Si prega di essere consapevoli che questo non è come appare il mio codice, è solo un esempio. Sto usando Django, se è rilevante.Memorizzazione dei parametri di funzione Python come variabile da chiamare in seguito

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

Vorrei che questo per leggere

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

Grazie per l'aiuto!

risposta

4

Usa *-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

Basta fare

return func(*parameters)

Si spacchetta i parametri e lo passa al func. Leggi la voce Python Docs su questo.

Per esempio -

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


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

Il tuo codice sarebbe ora di leggere -

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

Grazie per l'aiuto; Lo apprezzo. – Brandon

0

si può non fare semplicemente

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

?

1

C'è un approccio divinatorio a questo che una specie di abbastanza:

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

Questo tende ad essere più ordinato il codice in Python. Stai ancora usando * per decomprimere le tue variabili, ma non hai bisogno di linee vaganti di istruzioni if!

Problemi correlati