range()

6928

range() isimli fonksiyon, range aslında bir sınıftır bize range isimli bir sınıf türünden dolaşılabilir bir nesne vermektedir. bu dolaşılabilir nesne dolaşıldığında start değerinden başlayarak stop değerine kadar , start dahil ama stop değil step miktarı arttırımlarla int değerler elde edilir. Tek, iki ya da üç argümanlı kullanabiliriz.

range(stop)
range(start, stop)
range(start, stop, step)

Tek argümanlı kullanım sırasında 0 dan başlanır.

>>> print(list(range(10)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Diğer kullanımlar:

>>> print(list(range(10, 20)))
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> print(list(range(10, 20, 3)))
[10, 13, 16, 19]

range() fonksiyonunu 3 parametresi de int türden olmalıdır, o da bize dolaştığımız zaman int türden değerler verir, float desteği yoktur. Olsaydı floating point yuvarlamalardan kaynaklı hatalar olabilirdi. Fakat örneğin NumPy kütüphanesinin arange() isimli bir sınıfı vardır, bu arkadaş float değerler alabilir.


range() e negatif step değeri verirsek bu sefer büyükten küçüğe değerler elde edilir.

>>> print(list(range(20, 10, -3)))
[20, 17, 14, 11]

gibi…

Sequence Container

range sınıfı Python Standart Kütüphanesinde sequence container olarak ele alınmaktadır. Bu terim, Python’da elemanları arasında öncelik ve sonralık ilişkisi olan ve elemanlarına [] operatörü ile erişilen veri yapılarını betimler. list ve tuple sınıfları da birer sequence container’dır.

range sınıfı da bir sequence container belirttiği için listeler ve demetler üzerinde yapılabilen bazı işlemler range nesneleri üzerinde de yapılabilir, örneğin dilimleme gibi. Bu durumda yine range nesnesi elde edilir.

>>> x = range(10)[3:8:2]
>>> x
range(3, 8, 2)
>>> print(list(x))
[3, 5, 7]

range nesnelerinin dilimlenmesi pek sık kullanılan bir şey değildir.


range nesnelerinin belli bir elemanına [] operatörü ile erişilebilir ama bu nesneler değiştirilememektedir. Teknik olarak range değiştirilemez yani immutable bir sınıftır. Yine de index() ve count() metotları kullanabiliriz.

>>> r = range(100)
>>> r[23]
23
>>> r[23] = 100
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'range' object does not support item assignment

in ve not in operatörleri range nesnelerinde de kullanılabilir.

>>> r = range(30, 60, 3)
>>> 39 in r
True
>>> 40 in r
False
>>> 41 not in r
True

start, stop ve step örnek öznitelikleri instance attributes ile elde edilebilir.

>>> r = range(30, 60, 3)
>>> r.start
30

7184