Funksiyalar – dəfələrlə istifadə oluna bilən proqram fraqmentləridir. Bu proqram fraqmentlərinə (bloklarına) xüsusi adlar verərək onları proqramın istənilən yerində və istənilən qədər çağırıb icra etmək mümkündür. İndiyə qədər yazdığımız proqramlarda Python dilinin müxtəlif funksiyalarından istifadə etmişik. Hər bir funksiya müəyyən əməliyyatlar ardıcıllığından ibarət olub konkret bir tapşırığı yerinə yetirir. Buna misal olaraq kolleksiyaların uzunluğunu tapan len() və ədədi silsiləni generasiya edən range() funksiyalarını göstərmək mümkündür. Bununla belə, proqram məhsullarının hazırlanmasında Python dilinin funksiyaları kifayət etmədikdə, biz proqramçılar öz funksiyalarımızı yazıb işlədirik.
Funksiyalar bizi eyni proqram kodlarını təkrarlamaqdan azad edir, bu da gələcəkdə proqramların modifikasiya olunmasını xeyli dərəcədə asanlaşdırır. Bundan başqa, funksiyalardan istifadə etməklə böyük proqramları kiçik hissələrə bölmək olur. Bu da öz növbəsində proqramları daha yaxşı strukturlaşdırmağa və daha az xəta buraxmağa imkan verir.
Python proqramlaşdırma dilində funksiyalar, adətən, def, bəzən də lambda açar sözləri ilə təyin olunurlar. Biz daha çox def instruksiyasından yararlanacaq, lakin irəlidə anonim funksiyaları təyin etmək üçün lambda ifadələrini də nəzərdən keçirəcəyik.
Sadə formada funksiya aşağıdakı kimi elan edilir:
def funksiya(parametrlər):
ifadələr
return qiymət
Burada funksiya bizim funksiyaya verəcəyimiz addır. Funksiyaların adlandırılması dəyişənlərin adlandırılması kimidir. Funksiya adından sonra isə mötərizə daxilində parametrlər göstərilməli və qoşa nöqtə (:) qoyulmalıdır. Bu parametrlər vasitəsilə biz funksiyaya qiymətlər (arqumentlər) ötürəcəyik. Növbəti sətirlərdə isə funksiyanın gövdəsini təşkil edən ifadələr və return açar sözündən sonra funksiyanın qaytardığı qiymət göstərilməlidir. İndi isə gəlin verilmiş aralıqda ədədlərin cəmini hesablayan absum() adlı funksiya hazırlayıb ondan proqram daxilində istifadə edək:
>>> def absum(a, b):
s = 0
for i in range(a, b+1):
s += i
return s
>>> x = int(input('Aşağı sərhəddi daxil edin: '))
Aşağı sərhəddi daxil edin: 3
>>> y = int(input('Yuxarı sərhəddi daxil edin: '))
Yuxarı sərhəddi daxil edin: 5
>>> absum(x, y)
12
>>> absum(1, 10)
55
>>>
Gördüyünüz kimi, proqramın əvvəlində təyin olunan absum() funksiyası proqram daxilində iki yerdə çağrılaraq icra olunur. Burada funksiyamızı birinci dəfə çağıranda ona arqument kimi (x, y) dəyişənlərini, ikinci çağırışda isə (1, 10) qiymətlərini ötürürük. Əgər biz verilmiş aralıqdakı ədədlər cəmini hesablayan proqram fraqmentini funksiya halına gətirməsəydik, onda iki yerdə eyni əməliyyatlar ardıcıllığını təkrarlamalı olacaqdıq. Bu isə proqram kodunun süni şəkildə böyüməsinə gətirib çıxarardı. İndiki halda isə biz həm vaxtımıza, həm də kod sətirlərinə qənaət etmiş olduq.
Beləliklə, funksiyalar arqumentləri qəbul edən və qiymət qaytaran obyektlərdir. Bu baxımdan onları aşağıdakı kimi təsnif etmək olar:
- Parametrləri olan, qiymət qaytarmayan (None qaytaran) funksiyalar;
- Parametrləri olmayan, qiymət qaytaran funksiyalar;
- Həm parametrləri olan, həm də qiymət qaytaran funksiyalar;
- Parametrləri olmayan, qiymət qaytarmayan (None qaytaran) funksiyalar.
İndi isə bunların hər birinə aid aşağıdakı misalları nəzərdən keçirək:
>>> def say_hello(s):
print(s)
>>> say_hello('Salam Azərbaycan')
Salam Azərbaycan
>>>
Burada say_hello() funksiyası s parametri ilə təyin olunmuşdur. Funksiyanın icrası nəticəsində parametrə ötürülən sətir tipli arqument ekranda çapa verilir. Diqqət edin ki, funksiya kənara heç bir qiymət ötürmür (əslində None qiymətini ötürür), hətta burada return açar sözü, ümumiyyətlə, işlədilmir.
>>> def say_hello():
return 'Salam Azərbaycan'
>>> say_hello()
'Salam Azərbaycan'
>>>
Burada say_hello() funksiyası parametrsiz təyin olunmuşdur. Bu funksiya return ilə sətir tipdə qiyməti qaytarır.
>>> def say_hello(s):
return s
>>> say_hello('Salam Azərbaycan')
'Salam Azərbaycan'
>>>
Burada isə say_hello() funksiyası s parametri ilə təyin olunmuşdur. Bu funksiya da return ilə qiymət qaytarır.
>>> def say_hello():
print('Salam Azərbaycan')
>>> say_hello()
Salam Azərbaycan
>>>
Buradakı say_hello() funksiyası isə parametrsiz təyin olunmuşdur və kənara heç bir qiymət ötürmür. Əslində funksiya qiymət qaytarmır ifadəsi doğru deyil. Hər bir funksiyanın qiyməti vardır. Sadəcə əgər funksiya kənara həqiqi bir qiymət ötürmürsə, bu, None (heç nə) olaraq qəbul edilir. Bu haqda daha ətraflı irəlidə bəhs edəcəyik. Bir məqamı da xüsusilə qeyd edək ki, interpretator funksiyanın elanını (təyinini) gördükdə onu icra etmir. Funksiyaların icrası yalnız onların çağrıldığı zaman baş verir.

“Funksiyalar” üçün bir şərh
Şərh üçün bağlıdır.