Gibt es eine bessere Möglichkeit, Folgendes zu schreiben:
%Vor%Bitte beachten Sie, dass ich len (iterable_sequence) nicht verwenden kann, weil 1) nicht alle Sequenzen bekannte Längen haben; 2) In einigen Fällen kann das Aufrufen von len () das Laden der Elemente der Sequenz in den Speicher auslösen (wie es bei SQL-Abfrageergebnissen der Fall wäre).
Der Grund, warum ich frage, ist, dass ich einfach neugierig bin, ob es einen Weg gibt, um oberflächlicher und idiomatischer zu werden. Was ich suche ist in etwa wie folgt:
%Vor%(unter der Annahme, dass "else" hier nur für leere Sequenzen funktioniert, was ich nicht weiß)
Oder
%Vor%In jedem Fall wird ein Element verbraucht, wenn es vorhanden ist.
Ein Beispiel für die Implementierung von empty_adapter()
in den Kommentaren:
Sie können es wie folgt verwenden:
%Vor%Der Sonderfall für eine leere Sequenz für einen allgemeinen Fall scheint falsch zu sein. Es sollte eine bessere Lösung für ein domänenspezifisches Problem geben.
Es könnte ein Job für itertools.tee sein Sie "triggern" die Sequenz bei der Verifizierung, aber Sie erhalten danach eine unberührte Kopie der Sequenz:
%Vor% (es ist wert, dass tee
hier das "richtige" Ding tut: Es lädt nur das erste Element der Sequenz in dem Moment, in dem check.next()
ausgeführt wird - und dieses erste Element bleibt in sequence
verfügbar. Die verbleibenden Elemente werden nur als Teil der for
-Schleife abgerufen
Oder halte es einfach:
Wenn Sie len nicht verwenden können, können Sie aus denselben Gründen nicht überprüfen, ob die Sequenz einen bool-Wert von True hat.
Daher ist dein Weg einfach genug - Ein anderer Weg wäre, den Namen "item" vor der "for" -Anweisung zu löschen Überprüfen Sie, ob es nach der Schleife existiert:
%Vor%Aber Ihr Code sollte so klar wie möglich verwendet werden.