viele for-Schleifen

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
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Wie Sinnvoll ist es bei doppelten oder dreifachen for-Schleifen "itertools.product()" zu nutzen? Folgendes Beispiel:

Code: Alles auswählen

for x in xrange(10):
    for y in xrange(5):
        for z in xrange(2):
            do_something
Also rein von der Übersichtlichkeit finde ich

Code: Alles auswählen

for x, y, z in itertools.product(xrange(10), xrange(5), xrange(2)): do_something
wesentlich hübscher, vorallem wenn do_something noch ein paar ifs hat. Aber was haltet ihr davon?
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Kommt immer auch ein wenig auf die Konstellation an. Wenn Du anhand des ersten Items ggf. gar nicht mehr bis in die Tiefe vordringst, ist product() natürlich fehl am Platze.

Ach ja, "do_something" gehört eingerückt ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Es ging mir vorallem um Sachen wo halt alle Daten die von den Schleifen generiert werden eigentlich nur in der tiefsten/innersten Schleife benötigt werden.

und das Einrücken - wird nie wieder vorkommen :mrgreen: , ging so schön von der Hand, war eigentlich auch nicht geplant.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
syntor
User
Beiträge: 88
Registriert: Donnerstag 2. Dezember 2010, 03:56

Ich würde das lieber, nach Möglichkeit versteht sich, in verschiedene Methoden aufteilen. Insbesondere wenn du zusätzlich noch if/else Statements (was ist hier der deutsche Ausdruck?) hast.

Dies hilft, die Komplexität des Codes zu reduzieren. Ein Thema das du dir hierzu ansehen könntest, ist "Cyclomatic Complexity".

Hier ein Plugin dazu für vim und vom gleichen Autor ein Video dazu wo er zeigt, wie die Komplexität seines Plugins reduziert hat. Ich denke dies zeigt ein bisschen, was ich mit meinem Vorschlag gemeint habe.
BlackJack

@syntor: "Statement" wird in der Regel mit "Anweisung" übersetzt.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

@syntor
So schlimm wie in dem ersten Video..., so kann doch keiner ein Programm ernsthaft schreiben wollen.
Und das ganze in Methoden zu Struckturieren, so weit das möglich ist, ist ja wohl eine selbst verständlichkeit, aber wenn ich halt schlicht die Daten aus den Iterationen in der innersten Schleife benötige, dann ist das nicht gerade Sinvoll. Hier kann man höchstens die innerste Schleife als getrennte Methode schreiben, dann wäre aber nach wie vor das unschöne Aussehen von 3 Schleifen, mit einem Funktionsaufruf am Ende mit "do_somethig(x, y, z)".
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
syntor
User
Beiträge: 88
Registriert: Donnerstag 2. Dezember 2010, 03:56

Das erste Video ist bloss die Demonstration zur Komplexität ;)

Aber ich gebe dir Recht, es geht natürlich nicht immer.
Antworten