Heim >Backend-Entwicklung >Python-Tutorial >Wie erreicht „range()' von Python 3 eine so schnelle Mitgliedschaftsprüfung für große Zahlen?
Die überraschende Leistung von Range(n) in Python 3
In Python 3 ist die Range-Generator-Funktion für ihre außergewöhnliche Geschwindigkeit bekannt, wenn Prüfung auf Zugehörigkeit großer Zahlen innerhalb seines Bereichs. Dieses Verhalten scheint angesichts der immensen Anzahl von ganzen Zahlen, die scheinbar iteriert werden müssten, kontraintuitiv zu sein. Wie erreicht das Range-Objekt diese bemerkenswerte Effizienz?
Die intelligente Sequenz: Range in Python 3
Entgegen den Erwartungen ist das Range-Objekt in Python 3 nicht vorab seinen gesamten Bereich an Ganzzahlen generieren. Stattdessen fungiert es als intelligente Sequenz, die während der Iteration Zahlen nach Bedarf berechnet. Es speichert nur den Startpunkt, den Stopppunkt und die Schrittgröße und ermöglicht so die Berechnung einzelner Werte oder Teilbereiche nach Bedarf.
Die optimierte enthält Methode
Das Range-Objekt implementiert auch eine hochoptimierte contains-Methode. Diese Methode wertet aus, ob eine bestimmte Zahl innerhalb des Bereichs liegt, ohne die gesamte Sequenz zu scannen. Stattdessen wird eine mathematische Berechnung durchgeführt, die den Startpunkt, den Endpunkt und die Schrittgröße umfasst. Diese Berechnung wird in optimiertem C-Code ausgeführt, was zu einer nahezu konstanten Zeitkomplexität führt.
Beispielimplementierung eines vereinfachten Bereichsobjekts
Um das Konzept zu veranschaulichen, betrachten Sie ein vereinfachtes Implementierung unseres eigenen Range-Objekts:
class my_range: # ... other methods as described in the question and answer ... def __contains__(self, num): if self.step < 0: if not (self.stop < num <= self.start): return False else: if not (self.start <= num < self.stop): return False return (num - self.start) % self.step == 0
Dieses Beispiel demonstriert die Grundprinzipien hinter dem effizienten enthält Methode des Bereichsobjekts. Es berechnet die Bereichszugehörigkeit, ohne den gesamten Bereich zu durchlaufen.
Zusammenfassend ist das Bereichsobjekt in Python 3 eine sorgfältig entworfene Datenstruktur, die eine On-Demand-Berechnung mit einer optimierten enthält-Methode kombiniert. Dieses Design ermöglicht die Durchführung von Eindämmungsprüfungen für eine große Anzahl innerhalb eines großen Bereichs mit bemerkenswerter Effizienz.
Das obige ist der detaillierte Inhalt vonWie erreicht „range()' von Python 3 eine so schnelle Mitgliedschaftsprüfung für große Zahlen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!