Was ist der Wert des Kurzschlusses von Python?

Ich lerne das Buch mit dem Namen Data Structures & Algorithmen in Python .

Auf Seite 12, die die logischen Operatoren einführt, schreibt sie:

  • Zlib.error: Fehler -3 beim Dekomprimieren: falsche Headerprüfung
  • Kompressionsanfrage mit Python-Anfragen?
  • Python kann die Datei "warc.gz" nicht vollständig lesen
  • Wie kann ich den Inhalt einer gz-Datei auflisten, ohne ihn in Python zu extrahieren?
  • Ist das ein Fehler in dieser gzip-Aufblasmethode?
  • Entpacken eines Teils einer .gz-Datei mit Python
  • Die und und die Operatoren kurzschließen , (ich denke, es sollte hinzugefügt werden), da sie den zweiten Operanden nicht auswerten, wenn das Ergebnis auf der Grundlage des Wertes des ersten Operanden bestimmt werden kann.

    Dieses Merkmal ist nützlich, wenn man boolesche Ausdrücke baut, in denen wir zuerst testen, dass eine bestimmte Bedingung (wie z. B. eine Referenz nicht vorhanden ist), und testen Sie dann eine Bedingung, die sonst eine Fehlerbedingung erzeugt hätte, wenn der vorherige Test nicht erfolgreich war .

    Ich habe einige Fragen zu dieser Passage:

    • Ich kann die genaue Bedeutung des zweiten Absatzes nicht verstehen. In C können wir die && (logische und ) als folgenden Ausdruck verwenden: (i != 0) && (j / i > 0) , um den Fehler einer Division durch Null zu verhindern. Also, könnte ich den Ausdruck (i != 0) and ( j / i > 0) in Python als C verwenden, um den gleichen Effekt zu bekommen? Ist mein Verständnis für die Passage richtig?

    • Was ist die Verwendung von oder als Kurzschluss , um boolesche Ausdrücke zu konstruieren, wie im zweiten Absatz gesagt?

    • Die letzte Frage ist über die Grammatik war der vorherige Test nicht im zweiten Absatz gelungen . Ich das sollte es sein "ein Fehlerzustand, der den vorherigen Test nicht gelingen kann", bin ich richtig?

  • Wo sind die kaufmännischen und vertikalen Zeichen in Python verwendet?
  • Kurzschlussauswertung wie Python's "und" bei der Speicherung von Ergebnissen von Schecks
  • Funktioniert Python Kurzschluss?
  • 3 Solutions collect form web for “Was ist der Wert des Kurzschlusses von Python?”

    Wie ich mich erinnere, bezieht sich der Kurzschluss auf eine Compiler-Optimierung. Wie Sie bereits wissen, wird in einem AND-Zustand der zweite Ausdruck nicht ausgewertet, wenn die erste Bedingung falsch ist. Immerhin, was ist der Punkt? Der Gesamtausdruck kann nicht wahr sein, da die erste Bedingung bereits falsch ist. Ähnlich, mit der ODER-Logik, sobald eine einzige Bedingung wahr ist, ist der gesamte ODER-Ausdruck wahr. Das kocht auf Laufzeiteinsparungen. Ausdrücke können unevaluiert bleiben und somit keine CPU-Zyklen verbrennen.

    Übrigens verwende ich ODER Kurzschlüsse die ganze Zeit in bash Programmierung. Beispielsweise ist der folgende Ausdruck nützlich, um eine Funktion auszuführen, wenn die vorhergehende Bedingung falsch ist:

     [ $# -ge 2 ] || errexit "You have not supplied enough parameters" 

    Im obigen Beispiel wird errexit nur dann aufgerufen, wenn die Befehlszeile nicht über 2 Argumente oder mehr verfügt. Natürlich, in meinem Beispiel, ich interessiere mich nicht für Leistung. Vielmehr verwende ich das || Kurzschlusslogik als syntaktischer Zucker.

    Und das ist es, was es kocht: In einer engen Schleife, wo Leistung zählt, können Sie etwas sicher sein, dass Ausdrücke nicht unnötig ausgewertet werden. Aber in dem Beispiel, das du für && beschrieben hast, um dich durch Null zu teilen, hättest du das mit einer verschachtelten IF-Anweisung genauso gut schreiben können. Wieder ist es eine Stilwahl häufiger als eine Leistungsüberlegung.

    Alles, was gesagt hat, lass mich deine Fragen eins nach dem anderen beantworten:

    Ich kann die genaue Bedeutung des zweiten Absatzes nicht verstehen. In C können wir die && (logische und) als folgenden Ausdruck verwenden: (i! = 0) && (j / i> 0), um den Fehler einer Division durch Null zu verhindern. Also, könnte ich den Ausdruck (i! = 0) und (j / i> 0) in Python als C verwenden, um den gleichen Effekt zu bekommen? Ist mein Verständnis für die Passage richtig?

    Du hast Recht.

    Was ist die Verwendung von oder als Kurzschluss, um boolesche Ausdrücke zu konstruieren, wie im zweiten Absatz gesagt?

    Wie ich ausführlich ausführlich erklärt habe: Leistung und Syntax Zucker (das heißt, weniger Tippen und kürzere Ausdrücke, Idiome).

    Die letzte Frage ist über die Grammatik war der vorherige Test nicht im zweiten Absatz gelungen. Ich das sollte es sein "ein Fehlerzustand, der den vorherigen Test nicht gelingen kann", bin ich richtig?

    Ich stimme Ihnen zu, dass die Aussage besser formuliert werden könnte. Aber wenn Sie versuchen, es auszudrücken, werden Sie sehen, dass es eine schwierige Sache zu tun ist (in der Tat ist Ihr Vorschlag nicht gültig). Grundsätzlich ist Ihr Beispiel der Vermeidung von Kluft durch Null Fehler ist ein perfektes Beispiel für das, was der Autor versucht zu sagen. Hier ist mein Versuch zu paraphrasieren: Kurzschluss-Logik ist nützlich, um Vorbedingungen von Ausdrücken zu überprüfen, die Fehler erzeugen können, wenn diese Bedingungen nicht erfüllt sind.

    Ich kann die genaue Bedeutung des zweiten Absatzes nicht verstehen. In C können wir die && (logische und) als folgenden Ausdruck verwenden: (i! = 0) && (j / i> 0), um den Fehler einer Division durch Null zu verhindern. Also, könnte ich den Ausdruck (i! = 0) und (j / i> 0) in Python als C verwenden, um den gleichen Effekt zu bekommen? Ist mein Verständnis für die Passage richtig?

    Ja

    Was ist die Verwendung von oder als Kurzschluss, um boolesche Ausdrücke zu konstruieren, wie im zweiten Absatz gesagt?

    Als Beispiel:

     if (y is None) or (x not in y): 

    Wo y ist entweder eine Liste von Dingen oder None die in diesem Fall wollen wir ein bisschen wie eine leere Liste zu behandeln, aber x not in None wäre ein Fehler.

    Oder:

     (i == 0) or (j / i > 0) 

    Die letzte Frage ist über die Grammatik war der vorherige Test nicht im zweiten Absatz gelungen. Ich das sollte es sein "ein Fehlerzustand, der den vorherigen Test nicht gelingen kann", bin ich richtig?

    Nein, deine Phrasierung ist nicht richtig Grammatik.

    Wenn du X and/or Y hast, ist X der erste oder "vorherige" Test, Y ist der zweite, und es ist möglich, dass X falsch ist und versucht zu bewerten Y wird einen Fehler verursachen.

     >>> if 1 or 0: ... print "I am learning" ... I am learning >>> if 1 and 0: ... print "I am learning" ... >>> if 0: ... print "I am learning" ... >>> if 1: ... print "I am learning" ... I am learning >>> if None and 1: ... print "be crazy" ... >>> if None or 1: ... print "be crazy" be crazy 

    Viel wie C-Implementierung.

    Und die letzte Zeile ist richtig gelesen, wenn die erste Bedingung bei der Rückgabe des Fehlers nicht erfolgreich war, prüft die zweite Bedingung den Fehler

    Python ist die beste Programmiersprache der Welt.