Maison >développement back-end >Tutoriel Python >Comment l'objet `range()` de Python réalise-t-il des vérifications d'adhésion quasi instantanées pour des plages extrêmement grandes ?
Dans Python 3, la fonction range() génère un objet qui représente une plage de nombres. Cet objet diffère du générateur traditionnel en ce sens qu'il ne crée pas toute la plage en mémoire. Au lieu de cela, il produit des nombres à la demande, ce qui le rend beaucoup plus rapide pour les grandes plages.
Le problème :
Intuitivement, déterminer si un nombre se situe dans une plage nécessite de parcourir toutes les valeurs dans cette plage. Cependant, l'objet Python 3 range() défie cette attente en effectuant de telles vérifications presque instantanément, même pour de vastes plages.
La solution :
L'objet range() ne stocke pas physiquement toute la gamme. Au lieu de cela, il contient les valeurs de début, de fin et d'étape. Lors du test d’appartenance, il calcule le résultat en fonction uniquement de ces valeurs. Ce calcul est exécuté en code C, ce qui contribue à sa grande efficacité.
Une comparaison :
Le code Python suivant compare les performances de l'objet range() avec une implémentation personnalisée qui génère des nombres à la volée :
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)
L'objet range() effectue les vérifications presque instantanément, alors que l'implémentation personnalisée prend considérablement plus longtemps.
Optimisations supplémentaires :
L'objet range() implémente également un hook contient qui optimise les tests de confinement. Cette optimisation permet à l'objet de déterminer si un nombre est dans sa plage en temps quasi constant, quelle que soit la taille de la plage.
Conclusion :
La plage Python 3( ) la vitesse exceptionnelle de l'objet résulte de sa structure de données efficace et de ses opérations optimisées. Il stocke un minimum d'informations et calcule les valeurs demandées à la volée, permettant des tests de confinement presque instantanés, même pour des plages énormes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!