Kurs
range() fonksiyonu, özellikle for döngüleriyle ve bazen de while döngüleriyle çalışırken Python’da çok popüler ve yaygın olarak kullanılan bir fonksiyondur. range() fonksiyonunu bilmek ve ustalaşmak önemlidir; çünkü bu, birçok kapı açar: range(), bir programın akışını kontrol etmekten veri analizi için kullandığınız veri kümelerinde dolaşmaya kadar her şeyde kullanılır.
Python’a yeni başlıyorsanız ve daha fazlasını öğrenmek istiyorsanız DataCamp’in Python ile Veri Bilimine Giriş kursunu gözden geçirin.
Python’da range() Fonksiyonu Nedir?
range() fonksiyonu, bir sayı dizisi döndürür ve değiştirilemezdir; yani değeri sabittir. range() fonksiyonu bir ya da en fazla üç argüman alır: start ve stop değerleri ile step adımı.
range() Python3’te tanıtıldı. Python2’de benzer bir fonksiyon olan xrange() kullanılıyordu ve davranışı bir nebze farklıydı. Örneğin, xrange() bir üreteç (generator) nesnesi döndürür ve daha az bellek tüketirdi; buna karşılık range() ise bir liste ya da sayı dizisi döndürürdü.
range() fonksiyonunun yararlı olmasının nedenlerinden biri, yalnızca start, stop ve step değerlerini saklamasıdır; bu da onu bir liste veya tuple ile karşılaştırıldığında daha az bellek tüketir hale getirir.
Python range() Fonksiyonu Söz Dizimi
range() fonksiyonu üç farklı şekilde ifade edilebilir; bunları üç range() parametresi olarak düşünebilirsiniz:
range(stop_value): Varsayılan olarak başlangıç noktası sıfırdır.
range(start_value, stop_value): Başlangıç ve bitiş değerine göre diziyi üretir.
range(start_value, stop_value, step_size): Başlangıç değerini adım boyutuyla artırarak bitiş değerine ulaşana kadar diziyi üretir.

range() fonksiyonunun tipini, range()i type() ile sarmalayarak da kontrol edebiliriz.
my_range = range(100)
print(type(my_range))
# Expected output: <class 'range'>
Python range() Fonksiyonu Örnekleri
Şimdi birkaç örneğe bakalım; böylece range() kullanımını pratik edip pekiştirebilirsiniz.
Sayı dizisi yazdırmak için Python range() kullanma
İlk range() parametresini kapsayacak şekilde on sayılık bir diziyi yazdırdığımız basit bir örnekle başlayalım. Bunu yapmak için yalnızca stop değerini geçeceksiniz. Python sıfır tabanlı indeksleme kullandığından dizi sıfırla başlayacak ve belirtilen sayıda, yani n-1de duracaktır; burada n, range() fonksiyonunda belirtilen sayıdır.
my_range = range(10)
for num in my_range:
print(num)
# Expected output:
# 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
Beklendiği gibi, yukarıdaki hücre 0 ile başlayıp 9da biten bir sayı dizisi döndürür.
Python range()i list() ile kullanma
Range fonksiyonunu bir listenin argümanı olarak da kullanabilirsiniz; bu durumda aşağıda gösterildiği gibi uzunluğu stop değerine eşit olan bir sayı listesi elde edilir:
my_range = list(range(10))
print(my_range)
range_length = len(my_range)
print(range_length)
# Expected output:
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 10
Python range()te start, stop ve step kullanma
Sırada range() ile çalışmanın başka bir yolu var. Burada hem start hem de stop değerlerini belirteceksiniz.
my_range = range(5, 10)
print(my_range)
# Expected output: range(5, 10)
for num in range(5,10):
print(num)
# Expected output:
# 5
# 6
# 7
# 8
# 9
Benzer şekilde, negatif tamsayı değerlerini yazdırmak için de range() fonksiyonunu kullanabilirsiniz.
for num in range(-5,0):
print(num)
# Expected output:
# -5
# -4
# -3
# -2
# -1
Şimdi üçüncü parametre olan step boyutunu range() fonksiyonuna ekleyelim ve çıktıyı nasıl etkilediğini görelim. start noktasını 50, stop değerini 1000 ve step değerini 100 olarak belirteceksiniz. Aşağıdaki range fonksiyonu, 50’den başlayıp 100 adımlarla artan bir dizi üretmelidir.
my_range = range(50,1000,100)
print(my_range)
# Expected output: range(50, 1000, 100)
Tüm çift sayıları yazdırdığını fark edeceksiniz.
for num in range(50,1000,100):
print(num)
# Expected output:
# 50
# 150
# 250
# 350
# 450
# 550
# 650
# 750
# 850
# 950
Python range() ve float değerler hakkında bir not
range() fonksiyonunun yalnızca belirtilen değerler tamsayı olduğunda çalıştığına dikkat etmek önemlidir. Float veri türünü ve string veri türünü desteklemez. Ancak hem pozitif hem negatif tamsayı değerleri geçebilirsiniz. Float değerleri geçmeyi denediğinizde ne olur, bakalım.
for num in range(0.2,2.4):
print(num)
# Expected output:
# TypeError: 'float' object cannot be interpreted as an integer
C dilinde tamsayı değerlerinden oluşan bir bağlı listeyi tersine çevirmeye çalışırken en az bir kez kafanız karışmış olabilir. Ancak Python’da, range() fonksiyonuyla sadece start ve stopu yer değiştirip negatif bir adım ekleyerek bunu yapabilirsiniz. Çok basit değil mi? Hadi görelim!
for num in range(100,10,-10):
print(num)
# Expected output:
# 100
# 90
# 80
# 70
# 60
# 50
# 40
# 30
# 20
Bir listenin toplamını bulmak için range() kullanma
Diyelim ki bir tamsayı listeniz var ve bu listenin toplamını range() fonksiyonunu kullanarak bulmak istiyorsunuz. Nasıl yapılabileceğine bakalım.
Önce tamsayı değerlerinden oluşan listeyi tanımlayacaksınız. Ardından bir sayaç başlatacak ve liste üzerinde her yinelemede bu sayaçta değeri saklayıp mevcut liste değerini eski sayaç değeriyle toplayacaksınız.
Listedeki öğelere erişmek için, listenin length değeri üzerinde range() fonksiyonunu uygulayacak ve ardından sıfırdan başlayıp listenin uzunluğunda duran i indeksini geçirerek liste öğelerine erişeceksiniz.
list1 = [2,4,6,8,10,12,14,16,18,20]
count = 0
for i in range(len(list1)):
count = count + list1[i]
print(count)
print('sum of the list:', count)
# Expected output:
# 2
# 6
# 12
# 20
# 30
# 42
# 56
# 72
# 90
# 110
# sum of the list: 110
Bir listeyi birleştirmek için range()i itertools ile kullanma
itertools paketindeki chain sınıfını kullanarak iki veya daha fazla range() fonksiyonunu da birleştirebilirsiniz. Hatta yalnızca range fonksiyonunu değil, listeleri, tuple’ları vb. de birleştirebilirsiniz. chain metodunun bir üreteç nesnesi döndürdüğünü unutmayın; bu üreteçteki öğelere erişmek için bir for döngüsü kullanabilir veya list ile üreteci argüman olarak geçebilirsiniz.
from itertools import chain
a1 = range(10,0,-2)
a2 = range(30,20,-2)
a3 = range(50,40,-2)
final = chain(a1,a2,a3)
print(final) #generator object
# Expected output: <itertools.chain object at 0xae6330>
print(list(final))
# Expected output:
# [10, 8, 6, 4, 2, 30, 28, 26, 24, 22, 50, 48, 46, 44, 42]
Python range() ve eşitlik karşılaştırmaları
range() fonksiyonları arasında eşitlik karşılaştırmaları yapabilirsiniz. İki range() fonksiyonu verildiğinde, aynı değer dizisini temsil ediyorlarsa eşit kabul edilirler. Şunu da not edelim: Eşit olan iki range() fonksiyonunun start, stop ve step öznitelikleri aynı olmak zorunda değildir. Bunu bir örnekle anlayalım.
# range(0, 10, 3) = [0, 3, 6, 9]
# range(0, 11, 3) = [0, 3, 6, 9]
print(range(0, 10, 3) == range(0, 11, 3))
# Expected output: True
# range(0, 10, 3) = [0, 3, 6, 9]
# range(0, 11, 2) = [0, 2, 4, 6, 8, 10]
print(range(0, 10, 3) == range(0, 11, 2))
# Expected output: False
Yukarıdaki çıktılardan da görülebileceği gibi, range() fonksiyonunun parametreleri farklı olsa bile, iki fonksiyonun dizileri aynı olduğunda eşit kabul edilirler. İkinci örnekte step boyutunun değiştirilmesi karşılaştırmayı False yapar.
Sonuç
Eğitimi tamamladığınız için tebrikler. range() fonksiyonuyla biraz daha oynayıp, yalnızca tamsayılar dışındaki veri türlerini de kabul edecek şekilde nasıl özelleştirilebileceğini araştırmak isteyebilirsiniz.
Okuduktan sonra Python fonksiyonlarını pratik etmenin faydalı olacağını düşünüyorsanız, Python Fonksiyonları ve Python For Döngülerine Başlangıç Rehberi eğitimlerimize göz atın. Yapılandırılmış bir öğrenme yolu için, Verimli Python Kodu Yazma DataCamp kursuna bakın; bu kurs yalnızca range() fonksiyonunu ayrıntılı biçimde ele almakla kalmaz, aynı zamanda genel kodlama kavramlarında da yardımcı olarak ek yük oluşturmadan gerçekten verimli kod yazmanıza destek olur.