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.
Antworten
Benutzeravatar
akis.kapo
User
Beiträge: 127
Registriert: Freitag 1. September 2006, 12:58

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: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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

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: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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

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

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

EDIT:
Hat sich erledigt.
BlackJack

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.
Antworten