Seite 1 von 1
Wie umgschrieben?
Verfasst: Freitag 12. März 2010, 13:34
von DonnerCobra
Hi,
ich nutze gerade eine kleine Erweiterung die eine C Lib wrappt.
Dort gibt es eine Funktion die wie folgt funktioniert:
Code: Alles auswählen
int a=0;
while(IterateThrough(&a)!=FINISH_END)
{
/*...*/
}
Jetzt ist diese Funktion gewrappt und funktioniert so:
Da int ja unveränderlich sind, haben se den Wert zurückgegeben.
Wie würde ich das am besten in Python konvertieren? Derzeit sieht es so aus:
Code: Alles auswählen
end, a = IterateThrough()
while end==FINISH_END:
# do some stuff
end, a = IterateThrough()
Hat jemand eine Idee?
Danke euch!!
Edit (Leonidas): In das extra dafür angelegte, neue Forum verschoben.
Verfasst: Freitag 12. März 2010, 14:30
von Dauerbaustelle
Genau so? :-) Oder wie? Kannst du mal etwas mehr Kontext geben?
Verfasst: Freitag 12. März 2010, 14:47
von DonnerCobra
Naja, die umgeschrieben Variante sieht sehr unhübsch aus. Vor allem muss ich vor jedem continue in der Schleife wieder "end, a = IterateThrough" schreiben.
Ich hatte gehofft es geht sowas:
Code: Alles auswählen
while (end, a = IterateThrough()) and end==FINISH_END:
# code
Ich weiß, das geht nicht, aber evtl. sowas in der Art?
Verfasst: Freitag 12. März 2010, 14:57
von Dauerbaustelle
Naja, wie wäre sowas:
Code: Alles auswählen
def whilebody(a, end):
# ...
a, end = UPDATEIT()
while(end...):
whilebody(a, end)
a, end = UPDATEIT()
Dann kannst du aus dem `Body` der Whileschleife rausspringen, wann du willst.
Verfasst: Freitag 12. März 2010, 15:39
von DonnerCobra
Sieht deutlich besser aus, als meins
Da ich in der Uni an den Code komme, wie hättet ihr den IterateThrough gewrappt? Also nicht aus C++ Sicht, sondern wie würde die denn bei euch aussehen?
Verfasst: Freitag 12. März 2010, 15:56
von Darii
DonnerCobra hat geschrieben:Da ich in der Uni an den Code komme, wie hättet ihr den IterateThrough gewrappt? Also nicht aus C++ Sicht, sondern wie würde die denn bei euch aussehen?
Da IterateThrough offensichtlich einen Iterator darstellt hätte ich ihn auch als Iterator gewrappt, so dass man for verwenden kann.
Code: Alles auswählen
from ctypes import byref, c_int, cdll
lib = cdll.LoadLibrary(... # Library öffnen...
FINISH_END = c_int.in_dll(lib, "FINISH_END") # oder was auch immer FINISH_END ist...
def IterateThrough():
a = c_int()
while lib.IterateThrough(byref(a)) != FINISH_END:
yield a.value
for a in IterateThrough():
# do something
Oder so in der Art, habs nicht getestet, speziell der Wrapper-Code könnte crashen
