İç-içə funksiyalar

Python proqramlaşdırma dilində iç-içə funksiyalardan istifadə oluna bilər. Başqa sözlə, bir funksiya daxilində digər funksiyaları təyin edib çağırmaq mümkündür. Gəlin bunu təcrübədə nəzərdən keçirək.
Aşağıdakı proqramda daxil edilən ədədlərin ədədi ortasını tapmaq üçün iç-içə iki funksiyadan istifadə olunur:

>>> def avg(*args):
        def gav(sval, count):
            return sval / count 
        
        n = len(args)
        s = 0
        for i in args:
            s += i
        return gav(s, n)

>>> avg(1, 4, 7) 
4.0
>>>

Proqram mətnini oxuyarkən görəcəksiniz ki, əvvəlcə avg() adlı funksiya elan olunur. Bu funksiyanın daxilində isə gav() funksiyası təyin olunur. Proqram icra olunarkən avg() funksiyası çağrılaraq ona üç arqument (1, 4, 7) ötürülür. Bu arqumentləri qəbul edən avg() funksiyası onların sayını (n) və cəmini (s) hesablayır və qiymət kimi gav() funksiyasını qaytarır. Başqa sözlə, avg() funksiyası gav() funksiyasını çağıraraq öz işini yekunlaşdırır. Öz növbəsində gav() funksiyası ona ötürülən arqumentləri (s, n) qəbul edir və qiymət olaraq onların nisbətini qaytarır. Nəticədə daxil edilən ədədlərin ədədi ortası (4.0) əldə edilmiş olur. Bu qədər sadə.
Ümumiyyətlə, istənilən qədər iç-içə funksiyalardan istifadə oluna bilər. Burada bir məqama diqqət yetirmək lazımdır ki, daxili funksiya yalnız elan olunduğu yerdən çağırılmalıdır. Misal üçün: yuxarıda yazdığımız proqram kodunda gav() funksiyası daxili funksiya olduğuna görə onu yalnız avg() funksiyası daxilində çağırıb icra etmək mümkündür. Əsas proqramdan gav() funksiyası çağırıldığı zaman interpretator xəta qeydə alacaq.

İndi də başqa bir misalı nəzərdən keçirək. Skriptdə yazılmış aşağıdakı proqramda ədədlər üzərində sadə riyazi əməllər aparmaq üçün üç müstəqil funksiya təyin olunur. Bunlardan calc() funksiyası əsas funksiya rolunda çıxış edir və digər iki funksiya onun daxilindən çağırılır. Gördüyünüz kimi bir funksiya daxilində onun öz xaricində təyin olunan başqa funksiyaları da çağırmaq olar.

def input_nums():
    a = float(input("Birinci ədədi daxil edin: "))
    b = float(input("İkinci ədədi daxil edin: "))
    return a, b

def input_oper():
    print("---------------")
    print("| + : Toplama |")
    print("| - : Çıxma   |")
    print("| * : Vurma   |")
    print("| / : Bölmə   |")
    print("| x : Çıxış   |")
    print("---------------")
    t = input("Seçiminizi edin: ").lower()

    while t not in ['+', '-', '*', '/', 'x']:
        t = input("Seçiminizi edin: ").lower()

    return t

def calc():
    n1, n2 = input_nums()
    p = input_oper()

    if p == "+":
        print("Cəm:", n1 + n2)
    elif p == "-":
        print("Fərq:", n1 - n2)
    elif p == "*":
        print("Hasil:", n1 * n2)
    elif p == "/":
        print("Qismət:", n1 / n2)
    else:
        print("Proqramdan çıxdınız.")


calc()

Proqramı yazıb icra edin və hər dəfə müxtəlif ədədlər və əməliyyat növü daxil edərək nəticələri yoxlayın.

Biz proqram daxilində elan olunan qlobal dəyişənlərdən funksiyalarda istifadə edilməsini öyrənmişdik. İç-içə funksiyalarda da üst (xarici) funksiyada təyin olunan dəyişənlərdən alt (daxili) funksiyalarda istifadə etmək mümkündür:

>>> def outer(): 
        def inner():
            z = 3 
            print("inner:", z) 
            print("outer:", y) 
            print("global:", x)

        y = 2 
        inner()

>>> x = 1 
>>> outer() 
inner: 3 
outer: 2 
global: 1 
>>>

Gördüyünüz kimi, bu proqramda outer(), onun daxilində isə inner() funksiyası təyin edilmişdir. Şərti olaraq, daxili funksiya kimi qəbul etdiyimiz inner() funksiyasında elan edilən outer() funksiyasının y və əsas proqramın x dəyişənlərindən istifadə olunur.

İç-içə funksiyalar” üçün bir şərh

Şərh üçün bağlıdır.