2017-01-16 1 views
0

In meinem Python-Skript nenne ich diese Funktion ein paar MalAufruf Python-Funktion mit einem Satz von Parametern aus variablen

write2db(int(pocnr), larm1, tid, label1, q1, x, y, lat, long, radio) 

Ich möchte den Satz von Variablen in einer Variablen zu haben, in der Lage sein.

Sollte so aussehen

write2db (myargs)

Also, wenn ich eine Änderung zur Liste args mache ich es in mehr als einem Ort nicht zu tun haben. Ich habe ein paar Dinge ausprobiert, aber bisher kein Glück. Irgendwelche Vorschläge?

+2

'write2db (* myargs)' –

+1

Mögliches Duplikat von [Wie Parameter aus einer Liste extrahieren und sie zu einem Funktionsaufruf übergeben] (http://stackoverflow.com/questions/7527849/how-to- extract-parameter-from-a-list-und-pass-sie-zu-einer-funktion-anruf) –

+0

ich fühle mich dumm, aber ich verstehe nicht alle antworten. Um die Frage ein wenig zu klären. Wie definiere ich die Myargs? Ich habe versucht, es global als myargs = (int (pocnr), larm1, tid, label1, q1, x, y, lat, long, radio) zu machen, aber dann sind die Variablen noch nicht definiert. –

Antwort

2

Sie *args oder **kwargs verwenden können. Die Namen args und kwargs sind eigentlich nicht wichtig, aber es ist die * und **, die den Trick macht. Grundsätzlich entpackt * eine Liste, und ähnlich entpackt ** ein Diktat.

*args ist nur eine Liste von Werten in der Reihenfolge, in der Sie Ihre Funktion definiert haben.

z.

args = [23, 6, 2, "label", 5, 25, 21, 343.22, 111.34, 2] 
write2db(*args) 

**kwargs ist ein Schlüssel-Wert-Mapping (Python dict) von Argumentnamen zu Argumentwerte

zB.

kwargs = { 
    'pocnr': 23, 
    'larm1': 21, 
    # ... etc. 
} 
write2db(**kwargs) 
+0

Sie denken also, dass args = [int (pocnr), larm1, tid, label1, q1, x, y, lat, long, radio] den Trick machen wird? –

+0

Ja, sollte es. – denvaar

+0

Es hat! Danke vielmals. Jetzt kann ich meinen Code sauberer und einfacher zu verwalten machen. –

0

Sie könnten mit jedem dieser Argumente ein namedtuple erstellen und dann die Argumente innerhalb der Funktion nach Namen abrufen.

Oder Sie könnten nur mit variabler Länge Argument * args verwenden, und dann in Ihrer Funktion:

for arg in args: 
     # do something with arg 
+1

Du kannst einfach 'f (* args) übergeben '. Keine Notwendigkeit, irgendwelche Definitionen zu ändern. –

Verwandte Themen