In Python 3 generiert die Funktion range() ein Objekt, das einen Zahlenbereich darstellt. Dieses Objekt unterscheidet sich vom herkömmlichen Generator dadurch, dass es nicht den gesamten Bereich im Speicher erstellt. Stattdessen werden Zahlen auf Abruf erstellt, was die Arbeit bei großen Bereichen erheblich beschleunigt.
Das Problem:
Intuitiv erfordert die Bestimmung, ob eine Zahl in einen Bereich fällt, eine Iteration alle Werte in diesem Bereich. Das Python 3-Range()-Objekt widerspricht dieser Erwartung jedoch, indem es solche Prüfungen fast augenblicklich durchführt, selbst für große Bereiche.
Die Lösung:
Das range()-Objekt speichert nicht den gesamten Bereich physisch. Es enthält vielmehr die Start-, End- und Schrittwerte. Beim Testen auf Mitgliedschaft wird das Ergebnis allein auf der Grundlage dieser Werte berechnet. Diese Berechnung wird im C-Code ausgeführt, was zu ihrer hohen Effizienz beiträgt.
Ein Vergleich:
Der folgende Python-Code vergleicht die Leistung des range()-Objekts mit eine benutzerdefinierte Implementierung, die Zahlen im Handumdrehen generiert:
def my_crappy_range(N): i = 0 while i < N: yield i i += 1 1_000_000_000_000_000 in range(1_000_000_000_000_001) 1_000_000_000_000_000_000_000 in range(1_000_000_000_000_000_000_001) for number in my_crappy_range(100): print(number)
Das range()-Objekt führt die Prüfungen fast sofort durch, während die benutzerdefinierte Implementierung viel Zeit in Anspruch nimmt länger.
Zusätzliche Optimierungen:
Das range()-Objekt implementiert auch einen contains-Hook, der Eindämmungstests optimiert. Diese Optimierung ermöglicht es dem Objekt, in nahezu konstanter Zeit zu bestimmen, ob eine Zahl innerhalb seines Bereichs liegt, unabhängig von der Größe des Bereichs.
Schlussfolgerung:
Der Python 3-Bereich( Die außergewöhnliche Geschwindigkeit des )-Objekts resultiert aus seiner effizienten Datenstruktur und optimierten Abläufen. Es speichert nur minimale Informationen und berechnet die angeforderten Werte im Handumdrehen, was eine nahezu sofortige Eindämmungsprüfung selbst für enorme Bereiche ermöglicht.
Das obige ist der detaillierte Inhalt vonWie erreicht Pythons „range()'-Objekt nahezu sofortige Mitgliedschaftsprüfungen für extrem große Bereiche?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!