2016-07-19 30 views
-1

Gibt es eine garantierte Bewertungssequenz für die eingebaute Funktion 'any()'? Das heißt, es ist sicher anzunehmen, dassPython 'any()' Build-in-Funktion Bewertungssequenz

any([..., x, ... y, ...]) 

Zustand überprüfen wird ‚x‘ vor ‚y‘ für jede ‚x‘ aufgelistet, bevor ‚y‘?

Beachten Sie, dass sich die Frage 'Is the shortcircuit behaviour of Python's any/all explicit?' mit dem "Kurzschlussverhalten" befasst. Es handelt sich nicht um die Bewertungssequenz!

Bitte, bieten Beweis/Referenz für Ihre vorgeschlagenen Aussagen.

+1

[Ja ...] (http://StackOverflow.com/a/14866380/2011147) – Selcuk

+0

@Selcuk Ich glaube nicht, dass dies ein Duplikat ist. Kurzschließen bedeutet, die Auswertung zu stoppen, sobald der erste 'True'-ish-Wert erreicht ist, und nicht die Reihenfolge, in der die Werte bis dahin ausgewertet werden. – DeepSpace

+0

@DeepSpace Ich habe es nicht als Duplikat markiert, aber die Antwort, die ich verlinkt habe, hat eine Verknüpfung mit der tatsächlichen Zusammenführung, die darauf hinweist, dass die Listenelemente der Reihe nach ausgewertet werden. – Selcuk

Antwort

0

Es hängt vom iterable selbst ab. Wenn es bestellt ist (dh eine Liste), dann ja.

Wenn es nicht bestellt ist (dh ein Wörterbuch) dann nicht.

Es wird garantiert, dass die Auswertung stoppt, wenn der erste True -ische Wert erreicht wird.

+0

Was ist der Beweis für das, was Sie sagen? –

+0

1. 'any' und' all' rufen einfach die iterable '__iter__' Methode auf, um das nächste Element zu retrorieren, was Sie selbst beweisen können (erstellen Sie eine Klasse und überschreiben Sie' __iter__', um das Element zu drucken, bevor Sie es ausgeben). 2. Für den zweiten Teil meiner Antwort können Sie die Antworten auf die Frage lesen, dass Ihre Frage als doppelt markiert wurde. – DeepSpace

+0

Auf eine Implementierung zu verweisen ist nicht dasselbe wie "garantiertes" Verhalten. Wenn jemand mit einer Python-Implementierung kommt, die diesem Schema nicht folgt, würde jeder Code, der darauf angewiesen ist, beschädigt werden. Ich denke, die richtige Antwort wäre: Es ist nicht in der Dokumentation erwähnt, so kann es nicht garantiert werden. –