Heim >Backend-Entwicklung >Python-Tutorial >Warum ist „1015 in range(1015 1)' in Python 3 so schnell?

Warum ist „1015 in range(1015 1)' in Python 3 so schnell?

DDD
DDDOriginal
2024-12-13 19:19:11851Durchsuche

Why is `1015 in range(1015   1)` so fast in Python 3?

Warum ist Quadrillion in Range (Billiarde 1) in Python 3 schnell?

Frage:

Die Funktion range() von Python 3 ist ein Generator-ähnliches Objekt, das bei Bedarf Werte erzeugt. Vor diesem Hintergrund könnte man davon ausgehen, dass die Überprüfung auf eine Billiarde im Bereich (1 Billiarde 1) zeitaufwändig sein wird, da eine Billiarde Werte generiert werden müssten. Dieser Vorgang ist jedoch überraschend schnell. Warum ist das so?

Antwort:

Das range()-Objekt in Python 3 ist eine intelligente Sequenz, die ihre Elemente nicht sofort erzeugt. Es enthält nur die Start-, Stopp- und Schrittwerte und berechnet die nächste Ganzzahl bei Bedarf während der Iteration.

Entscheidend ist, dass range() den contains-Hook implementiert, der effizient bestimmt, ob eine gegebene Zahl vorliegt Zahl liegt innerhalb des Bereichs. Diese Berechnung ist eine (nahezu) konstante Zeitoperation, sodass das Objekt nicht jeden möglichen Wert im Bereich scannen muss.

Im Gegensatz zu einer Liste aller Werte im Bereich, die eine lineare Suche erfordern würde, Bereich () berechnet die Zugehörigkeit in O(log N)-Zeit, wobei N die Anzahl der Elemente im Bereich ist. Diese Optimierung wird durch die unbegrenzte Natur der Python-Ganzzahlen und deren effiziente Handhabung in optimiertem C-Code ermöglicht.

Das obige ist der detaillierte Inhalt vonWarum ist „1015 in range(1015 1)' in Python 3 so schnell?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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