logo

range() vs xrange() w Pythonie

Range() i xrange() to dwie funkcje, których można użyć do wykonania określonej liczby iteracji Do pętle w Pythonie. W Python3 , nie ma xrange, ale funkcja range zachowuje się jak xrange w Pythonie2. Jeśli chcesz napisać kod, który będzie działał zarówno w Pythonie2, jak i Python3, powinieneś użyć funkcji range(). Obydwa są realizowane na różne sposoby i mają z nimi różne cechy. Punktami porównawczymi są:

  • Typ zwrotu
  • Pamięć
  • Użycie operacji
  • Prędkość

Funkcja range() w Pythonie

The Funkcja range() w Pythonie zwraca ciąg liczb z podanego zakresu. Najczęstszym jego zastosowaniem jest iteracja sekwencji po sekwencji liczb za pomocą pętli Pythona.



Funkcja xrange() w Pythonie

Funkcja xrange() w Pythonie służy do generowania sekwencji liczb, podobnie jak funkcja range() w Pythonie. Funkcja xrange() w Pythonie jest używana tylko w Pythonie 2.x, podczas gdy funkcja range() w Pythonie jest używana w Pythonie 3.x.

Powrót Wpisz zakres() vs xrange()

Ten xzakres() funkcja zwraca obiekt generatora których można używać do wyświetlania liczb wyłącznie poprzez pętlę. Jedyny konkretny zakres jest wyświetlany na żądanie i dlatego nazywany jest leniwa ocena , podczas gdy w Pythonie funkcja range() zwraca obiekt zakresu (typ iterowalny).

Python3








# initializing a with range()> a>=> range>(>1>,>10000>)> # initializing a with xrange()> x>=> xrange>(>1>,>10000>)> # testing the type of a> print>(>'The return type of range() is : '>)> print>(>type>(a))> # testing the type of x> print>(>'The return type of xrange() is : '>)> print>(>type>(x))>

>

dzielenie ciągów C++
>

Wyjście:

The return type of range() is :   The return type of xrange() is :>

Szybkość funkcji xrange() i range().

Zmienna przechowująca zakres utworzony przez zakres() zajmuje więcej pamięci w porównaniu do zmiennej przechowującej zakres za pomocą xrange(). Podstawowym powodem jest to, że typem zwracanym przez range() jest lista, a xrange() to obiekt xrange().

Python3




import> sys> # initializing a with range()> a>=> range>(>1>,>10000>)> # initializing a with xrange()> x>=> xrange>(>1>,>10000>)> # testing the size of a> # range() takes more memory> print> (>'The size allotted using range() is : '>)> print> (sys.getsizeof(a))> # testing the size of x> # xrange() takes less memory> print> (>'The size allotted using xrange() is : '>)> print> (sys.getsizeof(x))>

tablica kodów c zawierająca ciągi znaków
>

>

Wyjście:

The size allotted using range() is :  80064 The size allotted using xrange() is :  40>

Operacje Użycie funkcji xrange() i range().

Funkcja range() zwraca listę ze wszystkimi operacjami, które Móc być zastosowane na liście, mogą być na niej użyte. Z drugiej strony, ponieważ xrange() zwraca obiekt xrange, operacje powiązane z listą Nie mogę można do nich zastosować, stąd jest to wada.

Python3




# initializing a with range()> a>=> range>(>1>,>6>)> # initializing a with xrange()> x>=> xrange>(>1>,>6>)> # testing usage of slice operation on range()> # prints without error> print> (>'The list after slicing using range is : '>)> print> (a[>2>:>5>])> # testing usage of slice operation on xrange()> # raises error> print> (>'The list after slicing using xrange is : '>)> print> (x[>2>:>5>])>

>

>

Błąd:

Traceback (most recent call last):  File '1f2d94c59aea6aed795b05a19e44474d.py', line 18, in   print (x[2:5]) TypeError: sequence index must be integer, not 'slice'>

Wyjście:

The list after slicing using range is :  [3, 4, 5] The list after slicing using xrange is :>

Różnica między range() i xrange() w Pythonie

Ponieważ xrange() ocenia tylko obiekt generatora zawierający tylko wartości wymagane przez leniwą ocenę, dlatego szybciej w implementacji niż range().

Ważne punkty:

tylko nick
  • Jeśli chcesz napisać kod, który będzie działał zarówno w Pythonie 2, jak i Pythonie 3, użyj funkcji range(), ponieważ funkcja xrange jest przestarzała w Pythonie 3.
  • range() jest szybsza, jeśli wielokrotnie iterujesz po tej samej sekwencji.
  • Funkcja xrange() musi za każdym razem rekonstruować obiekt będący liczbą całkowitą, ale funkcja range() będzie zawierała rzeczywiste obiekty całkowite. (Jednak zawsze będzie działać gorzej pod względem pamięci)

zakres()

xzakres()

Zwraca listę liczb całkowitych. Zwraca obiekt generatora.
Szybkość wykonywania jest mniejsza Szybkość wykonania jest większa.
Zajmuje więcej pamięci, ponieważ przechowuje w pamięci całą listę elementów. Zajmuje mniej pamięci, ponieważ przechowuje w pamięci tylko jeden element na raz.
Podczas zwracania listy można wykonywać wszystkie operacje arytmetyczne. Takich operacji nie można wykonać na xrange().
W Pythonie 3 funkcja xrange() nie jest obsługiwana. W Pythonie 2 funkcja xrange() służy do iteracji w pętlach for.