2013-07-08 10 views
6

Mam funkcję, w której, w zależności od przypadku zmieniam parametry wysyłane do funkcji, której wynik zwracam. Chciałbym po prostu zdecydować o parametrach w środku metody i mam tylko jedno połączenie zwrotne na dole mojej funkcji. Pamiętaj, że to nie jest mój kod, to tylko przykład. Używam Django, jeśli to jest istotne.Przechowywanie parametrów funkcji Pythona jako zmiennej do wywoływania później

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

chciałbym to przeczytać

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

Dzięki za pomoc!

Odpowiedz

4

Zastosowanie * do 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

Wystarczy zrobić

return func(*parameters)

rozpakowuje się parametry i przekazuje go do func. Przeczytaj wpis Python Docs na ten temat.

Na przykład -

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


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

Twój kod będzie teraz czytać -

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

Dzięki za pomoc; Doceniam to. – Brandon

0

Nie można po prostu zrobić

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

?

1

Jest pythonic podejście do tego, że niby ładny:

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

To wydaje się być neater kodu w Pythonie. Nadal używasz * do rozpakowania zmiennych, ale nie musisz wypełniać linii instrukcji if!

Powiązane problemy