blog posts

Python'da iç içe geçmiş işlevler

Python’da iç içe geçmiş işlevler – basit dilde eğitim + örnek ve kod

“Python’da İç İçe Fonksiyonlar”, programlamadaki bir fonksiyonun başka bir fonksiyonun içindeki tanımını ifade eden ilginç kavramlardan biridir. “İç Fonksiyonlar” olarak da bilinen bu iç içe geçmiş fonksiyonlar, aralık değişkenlerine erişme konusunda benzersiz bir yeteneğe sahiptir. Daha basit bir ifadeyle ana işlevlerinin kaynaklarından yararlanabilirler. Python’daki iç içe geçmiş işlevler bu dilin güçlü araçlarından biridir ve bir işlevi başka bir işlevin içinde tanımlamamıza olanak tanır. Bu konsept, bir işlevi başka bir işlevin içine yerleştirerek daha düzenli ve yönetilebilir kod oluşturmaya yardımcı olur. İç İçe Fonksiyonlar konsepti sayesinde kodlar daha okunaklı ve aynı zamanda daha optimize hale geliyor. Faradars dergisindeki bu yazımızda Python’da iç içe fonksiyonların neler olduğunu ve bunları neden kullandığımızı açıklıyoruz.

Bu makalenin içindekiler tablosu

Python’daki işlevlere giriş

Python’da iç içe geçmiş işlevler ne anlama gelir?

Python’daki iç içe geçmiş işlevlere örnekler

Python’da iç içe geçmiş işlevleri kullanmanın avantajları

Python’da iç içe geçmiş işlevler nasıl oluşturulur?

Gerçek uygulamalardaki Python iç içe geçmiş işlevlere örnekler

Python’da iç içe geçmiş işlevleri kullanmaya yönelik en iyi uygulamalar

Python’da iç içe geçmiş işlevleri kullanırken sık karşılaşılan hatalar

Sıkça Sorulan Sorular

Çözüm

Python’daki işlevlere giriş

Bu bölümde Python’daki fonksiyonlar ve fonksiyonel programlama gibi bu konunun temel kavramlarını kısaca gözden geçireceğiz .

Python’daki işlevler

Fonksiyonlar Python programlamada önemli bir rol oynar . İşlevler aslında belirli görevleri yerine getirebilen, yeniden kullanılabilen kod parçalarıdır. Fonksiyonu tanımladıktan sonra, adını kullanarak ve gerekirse parantez içindeki argümanları ileterek onu çağırabiliriz. Farklı görevleri gerçekleştirmek için her birinin kendi görevi olan çeşitli işlevler tanımlayabiliriz. Bu sayede kodlarımız daha kolay organize edilir ve yapılandırılır. Belgeleme ve işlev yazma, özellikle büyük projelerle uğraşırken kodun daha kolay okunabilmesi ve hata ayıklaması için önemli bileşenlerdir.

Fonksiyonel programlama

Python programlama dili “İşlevsel Programlama ” gibi çeşitli programlama paradigmalarını destekler . Bu programlama yaklaşımı, paylaşılan durumu, değiştirilebilir verileri ve yan etkileri kullanmadan saf işlevlerin kullanılmasına odaklanır. Normalde Python’da bu yaklaşım “yüksek dereceli” işlevler ve lambda ifadeleri kullanılarak yapılır veya lambda  kullanıldı.

Python’da iç içe geçmiş işlevler ne anlama gelir?

Python’daki iç içe işlevler, bu programlama dilinde başka bir işlevin içinde bir işlev oluşturduğumuz bir kavramdır. Yani bir fonksiyonu başka bir fonksiyonun içinde tanımlayabiliriz, daha sonra bu fonksiyon, dış fonksiyonunda bildirilen değişkenlere erişebilir.

Python’da iç içe geçmiş işlevleri ne zaman kullanırız?

Python’daki iç içe geçmiş işlevler, yalnızca “Dış İşlev” kapsamında ihtiyaç duyulan bir yardımcı işlevi tanımlamamız gerektiğinde kullanışlıdır. Python’daki iç içe geçmiş işlevler, kodumuzun okunabilirliğini artırmanın yanı sıra kodun düzenlenmesine ve modülerleştirilmesine de yardımcı olur.

Python’daki iç içe geçmiş işlevlere örnekler

Faradars dergisi yazımızın bu bölümünde Python’daki iç içe geçmiş fonksiyon veya iç içe geçmiş fonksiyon örneklerini incelemek istiyoruz.

Python’da iç içe geçmiş işlevlerin ilk örneği

Aşağıda iç içe geçmiş işlevlere bir örnek verilmiştir.

def outer_function(x):
    def inner_function(y):
        return x + y
    return inner_function

add_five = outer_function(5)
print(add_five(3))

Bu kodların çıktısını aşağıda verdik.

8

Kodların açıklaması

Bu örnekte aşağıda isimleri verilen 2 adet fonksiyon tanımladık.

  • dış_işlev
  • iç_işlev

İşlev dış_işlev  Giriş argümanı çağrıldı X  Alma ve işlev iç_işlev  çıktı olarak geri döner. Benzer şekilde, fonksiyon iç_işlev argüman sen  Alınan ve toplam X Ve sen  şunu döndürür:

fonksiyon çıkışı dış_işlev(5)  değişkene add_beş  Bunun bir fonksiyon haline gelmesini ve değerini atadık 5  argümanına katkıda bulunuyor. sırasında add_beş(3)  Buna eşit bir sonuç diyoruz 8  Alacağız

Python’daki iç içe geçmiş işlevlerin ikinci örneği

Aşağıda iç içe geçmiş işlevlerin başka bir örneğine bakıyoruz.

def outer_function():
    x = 1
    def inner_function():
        y = 2
        return x + y
    return inner_function()

print(outer_function())

Bu kodların çıktısını aşağıda verdik.

3

Kodların açıklaması

Bu örnekte, adı verilen bir işlev dış_işlev Başlangıç ​​değerini tanımladık. 1  İle X Oranlar ve çıktı iç_işlev şunu döndürür: iç_işlev Değişken sen İle 2  Başlatır ve toplar X Ve sen şunu döndürür:

İşlev ne zaman dış_işlev Değer diyoruz 3  Sonuç olarak değişkenlerin toplamını elde edeceğiz. X Ve sen Dır-dir. İşlev iç_işlev kapsama alanı içinde dış_işlev çağrılır ve değişkene X – Fonksiyonun içinde tanımlanmış dış_işlev – erişime sahip olacak.

Python’da iç içe geçmiş işlevleri kullanmanın avantajları

Python’da iç içe geçmiş işlevleri kullanmanın birçok avantajı vardır. Bu özellik, programcıların daha esnek ve sağlam bir programlama yapısı oluşturmasına, kodlarının okunabilirliğini artırmasına ve modüler kod oluşturarak bakım sürecini kolaylaştırmasına olanak tanır.

“Kapsülleme ve Modülerlik”: Python’da iç içe geçmiş fonksiyonların en önemli avantajı, bir fonksiyonun spesifik kapsamı içerisinde yardımcı fonksiyonları tanımlayabilme yeteneğine dayanır. Sonuç olarak, kod organizasyonu teşvik edilirken, genel ad alanındaki karışıklık ve karışıklıktan kaçınılır. Örneğin aşağıdaki örneği inceleyin.

def double_odd_numbers(numbers):
    def is_odd(num):
        return num % 2 != 0
    
    def double(num):
        return num * 2
    
    return [double(num) for num in numbers if is_odd(num)]

Bu örnekte, double_odd_numbers  Fonksiyonlar garip  Ve çift  Bu, bu işlevlerin yalnızca ana işlev kapsamında kullanıldığı için anlaşılmasını kolaylaştırır.

“Kapanış Oluşturma”: Python’daki iç içe geçmiş fonksiyonların bize sağladığı bir diğer önemli avantaj da kapanış oluşturabilme yeteneğidir. Bu özellik, iç içe geçmiş işlevlerin, kendilerini çevreleyen işlevlerden değişkenlere erişmesine ve bunları değiştirmesine olanak tanır. Örneğin aşağıdaki kod parçasını düşünün.

def power_function(base):
    def exponent_power(exponent):
        result = 1
        for _ in range(exponent):
            result *= base
        return result
    
    return exponent_power

square = power_function(2)
cube = power_function(3)

print(square(3))
print(cube(2))

Bu kodların çıktısı aşağıdaki gibi olacaktır.

8
9

Bu durumda fonksiyon güç_işlevi  Yeni bir işlev adı verildi üs_gücü  Bir bazın güç değeri olabilecek şeyleri oluşturur temel  - verilen güce göre – hesaplamak Bu iç içe geçmiş yapıyı kullanarak aşağıdaki gibi işlevler kare  Ve küp  değişkene temel  Çevreleyen işlevden, değerlere sahip yeni işlevlere erişin ve bunları oluşturun temel Farklı kolaylaştırırlar.

Bu dilin geliştiricileri, Python’daki iç içe geçmiş işlevlerden yararlanarak kodlarının okunabilirliğini ve modülerliğini artırabilir ve daha çeşitli ve verimli yapılar oluşturmak için çerçevenin güçlü işlevlerini kullanabilir.

Python’da iç içe geçmiş işlevler nasıl oluşturulur?

Python’daki iç içe işlevler, başka bir işlevin içinde bir işlev oluşturma veya tanımlama sürecini ifade eder. Bu süreç kodların daha iyi organize edilmesine ve okunabilirliğinin artmasına yardımcı olur. Python’da iç içe geçmiş bir işlev oluşturmak için aşağıdaki adımları uygulamanız yeterlidir.

  1. “Dış Fonksiyon”u yaratıyoruz.
  2. Dış fonksiyonun içinde “iç fonksiyon”u tanımlıyoruz.
  3. Dış fonksiyonun içindeki iç fonksiyona veya bunun sonucu olarak dönüş diyoruz.

Daha önce de belirttiğimiz gibi Python’da iç içe geçmiş işlevler oluşturmak, kodu organize etmenin ve basitleştirmenin yararlı bir yoludur. Ayrıca karmaşık süreçleri basitleştirir ve kodların daha iyi okunabilir olmasına yardımcı olur.

Gerçek uygulamalardaki Python iç içe geçmiş işlevlere örnekler

İç içe işlevler, diğer işlevlerin içinde tanımlanan işlevlerdir. Bu şekilde fonksiyon oluşturmak programlamada oldukça faydalıdır ve gerçek Python uygulamalarında kullanılabilir. Örneğin, iç içe geçmiş bir işlev, başka bir işlevi çağıran bir işlevi tanımlayabilir. Veya başka bir örnekte, iç içe geçmiş bir işlev, önceden tanımlanmış bir işlevi kullanan bir işlevi tanımlayabilir. Ayrıca iç içe geçmiş fonksiyon bize “Yerel Kapsam” da sağlayabilir.

İlk örnek

Aşağıdaki kodları göz önünde bulundurun.

def parent_function(x):
    def child_function(y):
        return y * 2
    return x + child_function(x)

print(parent_function(5))

Bu örnekte fonksiyon çocuk_işlevi  İç içe geçmiş bir işlevin, işlevin içinde olduğu kabul edilir ebeveyn_işlevi  tanımlandı. İşlev ebeveyn_işlevi Bir parametre adı verildi X  alır Daha sonra fonksiyondan çocuk_işlevi Değerini ikiye katlamak için kullanır. Son olarak toplam X Ve çocuk_işlevi şunu döndürür: Gerçekleştirerek ebeveyn_işlevi(5)  miktarı 15  Sonuç olarak elde ederiz

İkinci örnek

Bu konuda bir örnek daha verdik.

def adder(a):
    def inner(x):
        return x + a
    return inner

x = adder(3)
y = adder(5)
print(x(5))
print(y(5))

Bu örnekte,   Yuvalanmış bir işlev, bir işlevin içindedir engerek  tanımlandı. İşlev engerek Bir parametre adı verildi A  Alma ve işlev  şunu döndürür: İşlev  Bir parametre adı verildi X  Alma ve toplam X Ve A şunu döndürür: sırasında toplayıcı(3)  Fonksiyonu çağırıyoruz  Alacağız  Aynı zamanda X Kurtarırız Onun için toplayıcı(5)  Aynı zamanda böyle olduğu da doğrudur sen  Kurtarırız sırasında x(5)  şuna eşit bir sonuç olsun 8  Sahip olacağız ve ne zaman y(5)  Biz ararız, numara 10  çıktı olarak alacağız.

Üçüncü örnek

Faradars dergisinden aldığımız bu yazının devamında başka bir örneği inceleyeceğiz.

def exponential(x):
    def square(y):
        return y * y
    return square(x) * square(x)

print(exponential(2))

Bu örnekte fonksiyon kare  Yuvalanmış bir işlev, bir işlevin içindedir üstel  tanımlandı. İşlev üstel Bir parametre adı verildi X Alınan ve kare değeri X Dördüncü kuvvete geri döner. İşlev kare Bir parametre adı verildi sen Alındı ​​ve karesi alındı sen şunu döndürür: Gerçekleştirerek üstel(2)  , miktarı 16  bunun sonucunda elde edeceğiz.

Python’da iç içe geçmiş işlevleri kullanmaya yönelik en iyi uygulamalar

Bu iç içe geçmiş işlevlere yönelik en iyi uygulamalar aşağıdakileri içerir.

  • Aşırı yuvalamadan kaçının
  • Her fonksiyonun net bir amacı olmasını sağlamak.
  • Uygun değişken aralıklarını kullanın.

Python’da iç içe geçmiş fonksiyonları kullanmak için önce dış fonksiyonu tanımlarız, sonra da onun içindeki iç fonksiyonu tanımlarız. İç fonksiyon, dış fonksiyon içindeki değişkenlere erişime sahip olacaktır ancak bunun tersi doğru değildir. Aşağıda bu konuyla ilgili 2 örnek verdik.

# Example 1: Power function using nested functions
def power_function(num):
    def inner_power(power):
        return num ** power
    return inner_power

# Example usage
square_function = power_function(2)
cube_function = power_function(3)
print(square_function(5))  # Output: 32
print(cube_function(5))  # Output: 243

Bu örnekte Güç işlevi iç içe geçmiştir. Dış fonksiyon bir sayı alır ve bu sayının gücünü hesaplayan iç fonksiyonu çıktı olarak döndürür. İç fonksiyon, parametreyi iletmesine izin veren dış fonksiyonun kapsamında tanımlanır. sayı  güce erişin ve hesaplayın.

Aşağıda başka bir örnek var.

# Example 2: Functions in a loop
def generate_functions():
    functions = []
    for i in range(5):
        def inner_function(num):
            return num + i
        functions.append(inner_function)
    return functions

# Example usage
functions_list = generate_functions()
for j, f in enumerate(functions_list):
    print(f(j))  # Output: 4 5 6 7 8

Bu örnekte, bir döngü ve iç içe geçmiş işlevler kullanılarak bir işlev listesi oluşturulmuştur. Döngü içinde tanımlanan iç fonksiyon, döngü değişkenine erişim sağlar; Ben  verir Ortaya çıkan fonksiyon listesi daha sonra çeşitli değerlerle hesaplamalar yapmak için kullanılabilir. Ben kullanılmak

Python’da iç içe geçmiş işlevleri kullanırken sık karşılaşılan hatalar

Python programlamada iç içe geçmiş işlevleri kullanırken yaygın hataları önlemek için, işlev ve değişken adlarının iç işlevde ve onun ana işlevinde tekrarlanmadığından emin olmak önemlidir, çünkü bu, karışıklığa ve hatalara yol açabilir.

Kaçınılması gereken diğer yaygın hatalar arasında, başka bir işlevin içindeki bir işlevin yanlış çağrılması ve iç içe geçmiş işlevlerin içindeki döngülerin yanlış kullanılması yer alır. Ayrıca fonksiyonel programlama yöntemlerini kullanırken dikkatli olmalıyız.

Örneğin, aşağıdaki kod, bir değişkenin hem ana hem de iç işlevlerde tanımlandığı yaygın bir hatayı gösterir.

def parent_func():
    num = 2
    def nested_func():
        num = num * 2 # This will raise an UnboundLocalError when the function will be called
        return num
    return nested_func()

Sıkça Sorulan Sorular

Artık yuvalanmış işlevlerin ne olduğunu, Python’da nasıl yazıldığını ve nasıl çalıştıklarını bildiğimize göre, bu bölümde bunlarla ilgili bazı genel soruları da yanıtlayacağız.

İç içe işlev ile ne kastedilmektedir?

Söylediğimiz gibi iç içe işlevler, bir işlevin başka bir işlevin içinde tanımlanmasını içerir ve bu, kodların kapsüllenmesine ve düzenlenmesine yardımcı olur.

Python’da anonim işlevler ile iç içe geçmiş işlevler arasındaki fark nedir?

“İç içe işlevler” aslında başka bir işlevin içinde tanımlanan işlevlerdir ve bu işlevlere yalnızca dıştaki kapsayıcı işlevin içinden erişilebilir. Diğer yanda ise isimsiz fonksiyonlar olan ve lambda anahtar kelimesiyle tanımlanan “Anonim Fonksiyonlar” var. Bu tür işlevler programın herhangi bir yerinde tanımlanabilir ve ayrıca diğer işlevlere argüman olarak iletilebilir.

Çözüm

Faradars dergisindeki bu yazımızda Python’da iç içe fonksiyon kavramını ve bu tip fonksiyonların nasıl oluşturulacağını anlattık. Bu yöntemin bize sağladığı avantajları da öğrendik. Ayrıca Python’da iç içe geçmiş fonksiyonlara çeşitli örnekler vermişken, bunların kullanımının gerçek uygulamalarını da ilgili kodla birlikte anlattık.

İç içe fonksiyonlar yazarken, düzeltilmesi için bazı ipuçları verdiğimiz hatalarla karşılaşabiliriz. Son olarak bu başlıkta sıkça sorulan bazı soruları tartıştık ve ilgili cevapları birlikte inceledik