Teilerledigungserklärung Muster

By 6 agosto, 2020Sin categoría

Da Muster eine neue syntaktische Kategorie mit ihren eigenen Regeln und Sonderfällen sind und da sie Eingaben (gegebene Werte) und Ausgabe (erfasste Variablen) auf neuartige Weise mischen, erfordern sie ein wenig Gewöhnung. Es ist die Erfahrung der Autoren, dass dies schnell geschieht, wenn eine kurze Einführung in die grundlegenden Konzepte wie die folgenden vorgestellt wird. Beachten Sie, dass dieser Abschnitt nicht vollständig oder vollkommen genau sein soll. Im gesamten Buch haben Sie Beispiele für viele Arten von Mustern gesehen. In diesem Abschnitt sammeln wir die gesamte Syntax, die in Mustern gültig ist, und besprechen, warum Sie jede einzelne verwenden möchten. Es gibt keinen Standard- oder fall- oder anderen Fall – stattdessen kann der spezielle Platzhalter _ als letztes «catch-all»-Muster verwendet werden (siehe Abschnitt auf capture_pattern). Vergleichen Sie den Code aus diesem Beispiel mit dem Entwurf, der sich aus dem Erstellen einer Klassenhierarchie für eine abstrakte Form und bestimmten abgeleiteten Shapes mit jeweils einer eigenen Implementierung einer virtuellen Methode zur Berechnung des Bereichs ergeben würde. Sie werden oft feststellen, dass Musterabgleichsausdrücke ein sehr nützliches Werkzeug sein können, wenn Sie mit Daten arbeiten und die Bedenken hinsichtlich der Datenspeicherung von den Verhaltensbedenken trennen möchten. Mit Werten, die viele Teile haben, können wir die .. Syntax, um nur wenige Teile zu verwenden und den Rest zu ignorieren, sodass unterstrichen für jeden ignorierten Wert keine Unterstriche aufgeführt werden müssen. das.. Muster ignoriert alle Teile eines Werts, die wir im Rest des Musters nicht explizit abgeglichen haben. In Listing 18-23 haben wir eine Punktstruktur, die eine Koordinate im dreidimensionalen Raum enthält.

Im Übereinstimmungsausdruck möchten wir nur auf der x-Koordinate arbeiten und die Werte in den Feldern y und z ignorieren. | ist kürzer, was zur Lesbarkeit von geschachtelten Mustern wie Point(0|1, 0|1) beitragen kann. Auflistung 18-18: Verwendung eines Unterstrichs innerhalb von Mustern, die einigen Varianten entsprechen, wenn wir den Wert innerhalb der Some Ähnliche nicht verwenden müssen, wenn nicht Übereinstimmung nicht erlaubt wäre, da Übereinstimmung … Als… ist kein Ausdruck. Wir schlagen auch keine Zeit übereinstimmungskonstrukt vor, das in einigen Sprachen mit Musterübereinstimmung vorhanden ist, da es zwar praktisch sein mag, aber wahrscheinlich selten verwendet wird. Übereinstimmende Schlüsselwertpaare müssen bereits in der Zuordnung vorhanden sein und dürfen nicht per __missing__ oder __getitem__ erstellt werden. Beispielsweise stimmen collections.defaultdict-Instanzen nur Muster mit Schlüsseln ab, die bereits vorhanden waren, als der Matchblock eingegeben wurde. Dies ist wahrscheinlich das schwierigste Element.

Das Abgleichen mit einigen vordefinierten Konstanten ist sehr häufig, aber die dynamische Natur von Python macht es auch mehrdeutig mit Erfassungsmustern. Fünf weitere Alternativen wurden in Betracht gezogen: Definiert eine Bedingung für das aktuelle Muster. Um dem Muster zu entsprechen, muss ein Ereignis die Bedingung erfüllen. Mehrere aufeinander folgende where()-Klauseln führen dazu, dass ihre Bedingungen ANDed werden: Klassenmuster unterliegen der Löschung des Laufzeittyps. Obwohl man einen Typ alias IntQueue = Queue[int] so definieren kann, dass ein Muster wie IntQueue() syntaktisch gültig ist, sollten Typprüfer eine solche Übereinstimmung ablehnen: Listing 18-12 zeigt eine Punktstruktur mit zwei Feldern, x und y, die wir mit einem Muster mit einer let-Anweisung auseinanderbrechen können. Dies ist nicht die einzig mögliche Strategie, noch ist sie notwendigerweise die beste. Beispielsweise können die Instanzprüfungen gespeichert werden, insbesondere wenn mehrere Instanzen desselben Klassentyps vorhanden sind, jedoch unterschiedliche Argumente in einer einzelnen Matchanweisung. Theoretisch ist es auch möglich, dass eine zukünftige Implementierung Fallklauseln oder Untermuster parallel mithilfe einer Entscheidungsstruktur verarbeitet, anstatt sie nacheinander zu testen. Wenn ein Muster über das Schlüsselwort within eine Fensterlänge angehängt hat, ist es möglich, dass partielle Ereignissequenzen verworfen werden, da sie die Fensterlänge überschreiten.