⊗pyPmFnRe 24 of 129 menu

Python'da Özyineleme

Programlamada, özyineleme - bir fonksiyonun kendisini çağırması durumudur.

Örnek . Sayaçla Basit Özyineleme

Özyineleme kullanarak 1'den 10'a kadar olan sayıları yazdıralım:

i = 1 def func(): global i print(i) i += 1 if i <= 10: func() # burada fonksiyon kendisini çağırır func()

Bu kodun nasıl çalıştığını tartışalım.

i global değişkenimiz ve func fonksiyonumuz var. Fonksiyonun içinde, konsola i değişkeninin içeriği yazdırılıyor ve ardından ona bir ekleniyor.

Eğer i değişkenimiz 10'dan küçük veya eşitse, fonksiyon tekrar çağrılır. i değişkeni global olduğu için, fonksiyonun her yeni çağrılışında, bir önceki çağrıda ayarlanmış i değişken değerine sahip olacaktır.

i, 10'dan büyük olana kadar fonksiyonun kendisini çağırmaya devam edeceği anlamına gelir.

if olmadan fonksiyonu çalıştıramayacağımızı unutmayın - eğer yaparsak, sonsuz fonksiyon çağrısı oluşur.

Örnek . İç İçe Geçmiş Listelerdeki Öğeleri Yazdırmak için Özyineleme

Özyinelemeler en çok, farklı iç içe geçme derecelerine sahip listeleri yinelemek için kullanılır. Aşağıdaki listemiz olduğunu varsayalım:

lst = [1, [2, 3], [[4, 5], [6, 7, 8, [9]]]]

Onu yineleyecek bir fonksiyon oluşturalım. İlk olarak, listeden çıkarılan basit bir sayı olan, ilkel bir öğenin konsola yazdırılması için bir koşul belirlememiz gerekiyor. Ve eğer öğe, örneğin iç içe geçmiş bir liste gibi karmaşık bir nesneyse, bu durumda fonksiyonun kendisini çağırmasına, yani bir özyineleme meydana gelmesine izin verin. Öğenin türünü kontrol etmek için isinstance fonksiyonunu kullanalım. Sadece örneğimiz için, isinstance'nin ilk parametresine el, ikincisine ise list türünü yazalım:

def func(lst): for el in lst: if isinstance(el, list): func(el) else: print(el)

Fonksiyon çağrıldığında, iç içe geçmiş listedeki tüm sayıların bir dizisi yazdırılacaktır:

func(lst) # 1, 2, ... 8, 9 yazdırır

Örnek . İç İçe Geçmiş Liste Öğeleriyle İşlemler için Özyineleme

Özyinelemeler, iç içe geçmiş liste öğeleriyle çeşitli işlemler için de kullanılabilir. Aşağıdaki listemiz olduğunu varsayalım:

lst = [1, [2, 3], [[4, 5], [6, 7, 8, [9]]]]

Tüm öğelerinin toplamını alalım. Bunun için, fonksiyon içinde sayıların toplamının birikeceği res değişkenini tanımlayalım. Koşulda, eğer öğe karmaşık bir nesneyse, func fonksiyonunun parametresine gireceğini ve toplama ekleneceğini yazalım. Bu, öğenin ilkel hale gelene kadar özyinelemede olacağı anlamına gelir. Ve bu durumda, sadece res içinde yazılan toplama eklenecektir:

def func(lst): res = 0 for el in lst: if isinstance(el, list): res += func(el) else: res += el return res

Fonksiyonu çağıralım ve sonucunu konsola yazdıralım:

print(func(lst)) # 45 yazdırır

Örnek . Listede Biriktirmek için Özyineleme

Özyineleme ile iç içe geçmiş listeler tek boyutlu bir listeye dönüştürülebilir. Aşağıdaki listemiz olduğunu varsayalım:

lst = [1, [2, 3], [[4, 5], [6, 7, 8, [9]]]]

Fonksiyonda, kaynak listesinin öğelerinin birikeceği boş bir res listesi yazalım. Ardından bir döngü başlatalım ve bir koşul belirleyelim - eğer öğe bir listeyse, extend metoduna girer. Bu metod, bir listenin öğelerini ikinci listenin sonuna ekler, yani iç içe geçmiş listenin öğeleri res listesinin sonuna girecektir:

def func(lst): res = [] for el in lst: if isinstance(el, list): res.extend(func(el)) else: res.append(el) return res print(func(lst))

Yürütülen kodun sonucu:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

Pratik Görevler

İsteğe bağlı iç içe geçme seviyesine sahip bir sözlüğün tüm sayısal öğelerini yazdırın:

{ 'a': { 'b': 1, 'c': 2, 'd': { 'e': 3, 'f': 4 } }, 'j': { 'h': 5, 'k': 6, }, 'l': 7 }

Önceki görevdeki sözlüğün öğelerinin toplamını bulun.

Önceki görevdeki sözlüğün ilkel öğelerinin listesini alın.

Türkçe
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenЎзбекOʻzbekTiếng Việt
Web sitesinin çalışması, analiz ve kişiselleştirme için çerezleri kullanıyoruz. Veri işleme, Gizlilik Politikası'na uygun olarak gerçekleşir.
tümünü kabul et özelleştir reddet