Heim > Backend-Entwicklung > Python-Tutorial > Wie erreicht Pythons „range()'-Objekt nahezu sofortige Mitgliedschaftsprüfungen für extrem große Bereiche?

Wie erreicht Pythons „range()'-Objekt nahezu sofortige Mitgliedschaftsprüfungen für extrem große Bereiche?

Susan Sarandon
Freigeben: 2024-12-07 22:57:14
Original
461 Leute haben es durchsucht

How Does Python's `range()` Object Achieve Near-Instantaneous Membership Checks for Extremely Large Ranges?

Die überraschende Geschwindigkeit von Pythons Range-Objekt

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)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage