Unbekannte Anzahl von Parameter: Wie übergeben???

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
akis.kapo
User
Beiträge: 127
Registriert: Freitag 1. September 2006, 12:58

Unbekannte Anzahl von Parameter: Wie übergeben???

Beitragvon akis.kapo » Freitag 25. Januar 2008, 19:17

Hallo alle,

ich habe wieder eine grundsätzliche Frage.

Code: Alles auswählen

from struct import pack


pack( fmt, v1, v2, ...)
Return a string containing the values v1, v2, ... packed according to the given format. The arguments must match the values required by the format exactly.


fmt ist ein String, zum Beispiel "QQQ".

v1, ..., v3 die dazugehörigen Werte.

Was wenn, ...

1. Ich algorithmisch bestimme, wie fmt aussieht.
(Kann man ja in python extra komfortabel mit "Q" + "Q" + "Q" oder 3*"Q" setzen)
2. Es abhängig vom Algorithmus ist, wie viele Parameterwerte v1, ..., vN folgen.
(Ich es im vornhinein also als Entwickler nicht weiss.)

Ich kenne das resultierende fmt und ich hab eine Liste mit genau v1, ..., vN.

Beispielcode:
(Entspricht nicht meinem Code, ist aber ein minimales Beispiel, welches das Problem widerspiegelt.)

Code: Alles auswählen

def magische_funktion(eingabe):
    i = eingabe + 42
    parameterliste = []
    for j in xrange(i):
        parameterliste.append(j)
    return i*"Q", parameterliste


Wie bringe ich meine Parameter v1, ..., vN, die ich momentan in einer Liste speicher, in diese pack() Funktion?

Geht das überhaupt?
Ich bin am zweifeln.
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Freitag 25. Januar 2008, 19:22

Da schaust du am besten noch mal ins Python-Tutorial. Stichworte: Arbitrary Argument Lists / Keyword Arguments und Tuple Unpacking. Da ist es ganz gut erklärt.
Benutzeravatar
akis.kapo
User
Beiträge: 127
Registriert: Freitag 1. September 2006, 12:58

Beitragvon akis.kapo » Freitag 25. Januar 2008, 19:43

Also mit anderen Worten:

Code: Alles auswählen

def magische_funktion(eingabe):
    i = eingabe + 42
    parameterliste = []
    for j in xrange(i):
        parameterliste.append(j)
    return i*"Q", parameterliste

pack_args = magische_funktion(1337)


pack(pack_args[0], *pack_args[1])


Richtig?
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Freitag 25. Januar 2008, 19:48

Ja, genau.
Benutzeravatar
akis.kapo
User
Beiträge: 127
Registriert: Freitag 1. September 2006, 12:58

Beitragvon akis.kapo » Freitag 25. Januar 2008, 19:52

Was bin ich bloß für ein Tier? 8)
BlackJack

Beitragvon BlackJack » Freitag 25. Januar 2008, 20:14

Wenn das immer der gleiche Datentyp ist, wäre vielleicht auch das `array`-Modul geeigneter als `struct`.

Falls es wirklich komplexere Strukturen sind, und es auch ein externes Paket sein darf, ist Construct ein Blick wert.
Benutzeravatar
akis.kapo
User
Beiträge: 127
Registriert: Freitag 1. September 2006, 12:58

Beitragvon akis.kapo » Freitag 25. Januar 2008, 20:38

EDIT:
Hat sich erledigt.
BlackJack

Beitragvon BlackJack » Freitag 25. Januar 2008, 20:53

In einfachen Worten: `numarray` hat nichts mit `construct` zu tun. Das sind zwei verschiedene Module für völlig unterschiedliche Aufgaben.

Ich meinte auch das `array`-Modul aus der Standardbibliothek und keines zum "rechnen". Das ist für Arrays ähnlich denen in C wo jedes Element ein C-Grunddatentyp ist. Das heisst das kannst Du nur gebrauchen, wenn Du viele `unsigned long long` hast.

Wenn es Strukturen mit verschiedenen Datentypen sind, dann ist das `construct`-Modul etwas umfangreicher als `struct` und bietet Objekte mit Attributen statt einfacher Tupel.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder