Python dərs 4 — Funksiyalar
Funksiyalar programımızda bir neçə yerdə lazım olacaq kod bloğunu bir yerə bir adla yazıb sonradan o adla istifadə etmək üçündür. Pythonda funksiya aşağıdakı kimi yazılır.
def funtionname(parameters…):
kodlar
…
Parametr olmağı vacib deyil. İstənilən sayda parameter yazıldığı kimi parameter yazılmaya da bilər. def sözü ilə funksiya təyin olunur. Həmişə def yazmaq vacibdir. Parametr olmasa belə funksiya adından sonar mötərizə açıb bağlamaq vacibdir. Funksiyanın gövdə hissəsi yəni kodlar yazdığımız hissəsi ‘tab’-dan sonar yazılmalıdır. İndi sadə bir parametrsiz funksiya yazaq.
def salamyaz():
print(“Salam”)
salamyaz() #funksiyanı çağırırıq
İndi isə parametrlərin istifadəsinə baxaq. cem funksiyası yazaq və parametr kimi verilən iki ədədin cəmini yazdırsın.
def cem(a,b): #burada a və b parametrlərdir
print(a+b)
cem(5,4) #9 funksiya çağrılarkən yazılan 5 və 4 arqumentlərdir
cem(5,100)#105
cem(5,-20)#-15
İndi 2-dən çox rəqmin cəmini tapan funksiya yazaq.
def cem(l): #l list parametri alır
cem = 0 #funksiya içində funksiya ilə eyni adlı dəyişən tanıtmaq olar
for i in l:
cem += i
print(cem)
list1 = [1,20,3,-12,5,8,-10] #list
cem(list1) #15
Bu şəkildə də yazmaq olar.
def cem(*a):
cem = 0
for i in a:
cem += i
print(cem)
cem(4,5,6,7,-8,-9)
Yuxarıdakı bütün nümunələrdə sıralı arqumentlərdən istifadə etdik. Bundan başqa adlandırılmış arqumentlərdə var. Buna aid bir neçə nümunəyə baxaq.
def cem(a,b):
cem= a+b
print(cem)
cem(b=4,a=5)#9
Arqumentlərə default dəyər vermək olar. Bu halda funksiyanı çağırdıqda bu arqumentə dəyər ötürməsəkdə olar.
def cem(a,b=5):
cem= a+b
print(cem)
cem(a=5)
cem(5)
cem(5,15)
cem(a=5,b=15)
cem(b=5,a=15)
Default dəyərə sahib olan parametrləri əvvəl yazıb sonar digər parametrləri yazmaq olmaz. Həmişə ən sonda default dəyəri olan parametrləri yazmaq lazımdı. Yəni yuxarıdakı kodda def cem(a=5,b) yazsaq xəta verəcək. Bütün parametrlərə default dəyər vermək olar. Bu zaman həmin funksiyanı arqumentsiz də çağırmaq olar.
İstənilən sayda adlandırılmış arqumentlər istifadə etmək üçün “**” operatorundan istifadə etmək olar.
def fonksiyon(**ədədlər):
cəm = (ədədlər[“a”]+ədədlər[“b”])
print(cəm)
fonksiyon(a=80,b=90)#170
Aşağıdakı yazılışlar doğru deyil və xəta verəcək.
hi()
def hi():
print(“hi!”)
#parameter
def hi():
print(“hi”)
hi(5)
#default dəyərli parametrlər
def sum(a, b=2, c):#default dəyəri olan parametrlər sonda yazılmalıdır.
print(a + b + c)
sum(a=1, c=3)
Yuxarıda yazdığımız bütün funksiyalarda ekrana nəsə yazdırdıq, amma çox vaxt funksiyadan geriyə dəyər qaytraıb onu istifadə etmək lazım olacaq. Bunun üçün return sözündən istifadə olunur.
def imtahandankecibmi(a):
if a>60:
return “İmtahandan keçib”
else:
return “İmtahandan keçməyib”
print(imtahandankecibmi(10))
print(imtahandankecibmi(70))
Bu funksiyanı else hissəsini silək.Bizə geriyə None döndürəcək. Əgər funksiya içərisində bizə heç nə geri qaytarmırsa None qaytarır.
def imtahandankecibmi(a):
if a>60:
return “İmtahandan keçib”
print(imtahandankecibmi(1)) #None
None özü xüsusi bir tipdir. Tipini yoxlamaq üçün belə baxa bilərik.
print(type(None)) #<class ‘NoneType’>
Bir çox proqramlaşdırma dilindən fərqli olaraq Pythonda bir funksiya şərtə görə fərqli tiplərdə dəyər qaytara bilər. Aşağıdakı nümunəyə baxaq.
def imtahandankecibmi(a):
if a>60:
return “İmtahandan keçib”
elif a==50:
return 5
elif a==40:
return True
elif a==30:
return 1.5
print(type(imtahandankecibmi(65)))#str
print(type(imtahandankecibmi(50)))#int
print(type(imtahandankecibmi(40)))#bool
print(type(imtahandankecibmi(30)))#float
print(type(imtahandankecibmi(35)))#NoneType
Həmçinin funksiyaya fərqli tiplərdə arqumentlər göndərib içəridə buna görə əməliyyatlar apara bilərik.
def isInt(data):
if type(data) == int:
return True
elif type(data) == float:
return False
print(isInt(5))
print(isInt(5.0))
print(isInt(“5”))
Funksiyada return ifadəsindən sonra funksiya bizə geri dəyər qaytarır və ondan sonra yazdığımız kodlar çalışmır.
def imtahandankecibmi(a):
return #elave etdik
if a>60:
return “İmtahandan keçib”
elif a==50:
return 5
elif a==40:
return True
elif a==30:
return 1.5
print(type(imtahandankecibmi(65))) #NoneType
print(type(imtahandankecibmi(50))) #NoneType
print(type(imtahandankecibmi(40))) #NoneType
print(type(imtahandankecibmi(30))) #NoneType
print(type(imtahandankecibmi(35))) #NoneType
Bu halda istənilən halda NoneType geri qayıdacaq və return-dən aşağıdakı kodlar heç vaxt çalışmayacaq.
Built in funksiyalar python içində istifadə etməyə hazır şəkildə gələn funksiyalara deyilir. Məs:range(),sum(),print(),len() və s
Daha bir nümunəyə baxaq.
x = 10
def f():
x = 20
print(x)
f()#20 funksiya içindəki x
print(x) #10 funksiyadan kənardakı x
global dəyişənlərdən istifadə etsək funksiya içindəki dəyişəni kənarda da istifadə etmək olar.
x = 10
def f():
global x
x = 20
print(x)
f()#20
print(x) #20
Aşağıdakı halda funksiyanı çağırmadığımız üçün funksiya içində global x təyin edilsə belə ekrana 10 yazacaq.
x = 10
def f():
global x
x = 20
print(x)
print(x) #10
x-ə funksiya xaricində dəyər mənimsətməsəkdə olar.
def f():
global x
x=20
print(x)
f()#20
print(x)#20
Aşağıdakı şəkildə yazsaq xəta verəcək.
def f():
x=20
print(x)
f()
print(x) #x-i tanımır xəta
Funksiya içində funksiya yazmaq da olar.
x = 10
print(“x =”,x)
def f():
x = 20
print(“f içində x =”,x)
def g():
x = 30
print(“g içində x =”, x)
g()
f()
Nəticə:
x = 10
f içinde x = 20
g içinde x = 30
Rekursiv funksiyalar özünü təkrar təkrar çağıran funksiyalardır. Bu funksiyalarda base case olur hansıki əvvəl bu yazılır həmişə sabit dəyər döndürür sonra isə recursuve case yazılır hansı ki funksiyanın özünü çağırır. İlk n Fibanoçi ədədinin cəmini geri qaytaran funksiya yazaq.
def fibonacci(eded):
# Base Case
if eded == 0:
return 0
elif sayi == 1:
return 1
# Recursive Case
else:
return fibonacci(eded-1) + fibonacci(eded-2)
print(fibonacci(10))
Eyni məntiqlə rekursiv funksiyalar yaza bilərsiz. Funksiyaları daha yaxşı başa düşmək üçün bir neçə nümunə fikirləşib yazmağınız yaxşı olacaq.
Son olaraq yazdığınız funksiyalara məlumat əlavə edə bilərsiniz. İntelligence və s yerlərdə bu məlumat görünəcək. Məlumat “””Melumat “”” və ya “ “ şəklində yazılır. Əsas şərt odur ki, funksiyanın içində ilk sətirdə yazılmalıdır məlumat.
def cem(a,b):
“””a və b ədədlərini toplayır”””
# və ya “a və b ədədlərini toplayır”
return a+b
print(cem.__doc__)