Noten-Polymorphismus in Python lesen

Auszug aus "Python Learning Manual" Kapitel 16 Funktionsgrundlagen

Einführung

Funktionsdefinition und Aufruf

Definition

def times(x,y):
	return x*y

Der obige Code definiert eine Funktion namens times, die das Produkt ihrer beiden Parameter zurückgibt.

Durch Aufrufen der
def-Anweisung wurde eine Funktion erstellt, diese jedoch nicht ausgeführt. Nach dem Ausführen von def können Sie diese Funktion im Programm aufrufen, indem Sie nach dem Funktionsnamen Klammern einfügen. Die Klammern enthalten n Objektparameter, die dem formalen Parameternamen des Funktionskopfes übergeben (zugewiesen) werden:

>>times(2,4)
8

Fügen Sie hier eine Bildbeschreibung ein
Der zweite Aufruf übergab zwei völlig unterschiedliche Arten von Objekten. Wie oben gezeigt.
Diesmal ist die Funktion völlig anders. Der zweite Aufruf übergibt eine Zeichenfolge und eine Ganzzahl an x ​​und y anstelle von zwei Zahlen. Zusammenfassend funktioniert es sowohl *für Zahlen als auch für Sequenzen. Da es in Python noch nie eine Typdeklaration für Variablen, Parameter oder Rückgabewerte gab, können wir Zeiten als Zahlenmultiplikation oder als Sequenzwiederholung verwenden.
Mit anderen Worten, die Funktionszeiten hängen von dem an sie übergebenen Wert ab. Dies ist eines der Kernkonzepte in Python (auch einer der Tricks bei der Verwendung von Python).

Polymorphismus in Python

Wie wir gesehen haben, *hängt die Bedeutung der Ausdrücke x und y in der Zeitfunktion vollständig von den Objekttypen von x und y ab. Dieselbe Funktion führt in einer Instanz eine Multiplikation durch, in einer anderen jedoch eine Wiederholung. . Python stellt die Rationalität eines bestimmten Objekts unter eine bestimmte Syntax, damit das Objekt selbst beurteilt werden kann. Mit anderen Worten wird *als Versandmechanismus die Ausführungskontrolle auf das zu verarbeitende Objekt übertragen.
Dieses typabhängige Verhalten wird als Polymorphismus bezeichnet, und seine Bedeutung ist, dass die Bedeutung einer Operation vom Typ des operierten Objekts abhängt. Da Python eine dynamisch typisierte Sprache ist, ist Polymorphismus überall in Python zu sehen. Tatsächlich sind alle Operationen in Python polymorph: Drucken, Indexieren, *Operatoren und mehr.
Dies ist beabsichtigt und kann als Ausdruck der Einfachheit und Flexibilität der Sprache angesehen werden. Funktionen können automatisch auf alle Objekttypen angewendet werden, solange die Objekte die erwartete Schnittstelle (Protokoll) unterstützen, kann die Funktion sie verarbeiten. Mit anderen Worten, wenn das an die Funktion übergebene Objekt die erwarteten Methoden und Ausdrucksoperatoren unterstützt, sind sie Plug-and-Play-kompatibel mit der Logik der Funktion.
Wenn das übergebene Objekt diese erwartete Schnittstelle nicht unterstützt, erkennt Python einen Fehler, wenn der Ausdruck * ausgeführt wird, und löst automatisch eine Ausnahme aus. Daher ist es normalerweise bedeutungslos, eine Codefehlerprüfung zu schreiben. In der Tat wird dadurch die Funktion der Funktion eingeschränkt, da die Funktion auf diejenigen Typen beschränkt wird, die die von uns geschriebenen Tests bestehen. Aus makroökonomischer Sicht programmiert Python für Objektschnittstellen, nicht für Datentypen.

Überdenken Sie den Polymorphismus

Fügen Sie hier eine Bildbeschreibung ein
Die Schnittfunktion ist ebenfalls polymorph und kann mehrere Typen unterstützen, solange sie die entsprechende Objektschnittstelle unterstützt. Wie in der obigen Abbildung gezeigt, haben wir Objekte unterschiedlicher Typen (eine Liste und ein Tupel (gemischter Typ)) an die Funktion übergeben und dennoch die gemeinsamen Elemente ausgewählt, da Sie den Typ der angegebenen Parameter nicht im Voraus definieren müssen. Diese Schnittfunktion ist sehr Bereit, über alle übergebenen Sequenzobjekte zu iterieren, solange diese Sequenzen die erwartete Schnittstelle unterstützen.
Für die Schnittfunktion bedeutet dies, dass der erste Parameter Schleifen unterstützen muss und der zweite Parameter beim Testen von Elementen unterstützt. Alle Objekte, die diese beiden Punkte erfüllen, können unabhängig von ihrem spezifischen Typ normal funktionieren. Dazu gehören physisch gespeicherte Sequenzen wie Zeichenfolgen und Listen.

Was ist falsch an der Praxis, "den an die Funktion übergebenen Objekttyp zu überprüfen"?
Das Überprüfen des an die Funktion übergebenen Objekttyps zerstört im Wesentlichen die Flexibilität der Funktion und beschränkt die Funktion auf einen bestimmten Typ. Ohne solche Überprüfungen kann die Funktion einen größeren Bereich von Objekttypen verarbeiten, wobei jede Schnittstelle von der Unterstützungsfunktion erwartet wird Alle Objekte sind anwendbar (der Begriff Schnittstelle bezieht sich auf eine Reihe von Methoden und Ausdrucksoperatoren, die von einer Funktion ausgeführt werden).

Ich denke du magst

Origin blog.csdn.net/qq_38469784/article/details/110853910
Empfohlen
Rangfolge