Bu derste fonksiyonlara parametre vermenin farklı yollarını öğrenmeye çalışacağız. İsterseniz hemen başlayalım.
Biliyorsunuz önceki konularda şöyle bir fonksiyon tanımlamıştık.
def selamla(isim):
print("Selam",isim)
selamla("Murat")
Selam Murat
selamla("Serhat")
Selam Serhat
selamla() # Böyle bir kullanım hata verecektir.
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-6-8fe4760a9706> in <module>() ----> 1 selamla() # Böyle bir kullanım hata verecektir. TypeError: selamla() missing 1 required positional argument: 'isim'
Ancak biz eğer bir parametrenin değerini varsayılan olarak belirlemek istersek, bunu varsayılan değerler ile yapabiliriz. Varsayılan değerleri anlamak için selamla fonksiyonunu varsayılan parametre değeri ile yazalım.
def selamla(isim = "İsimsiz"):
print("Selam",isim)
selamla() # Hiç bir değer göndermedik. "isim" parametresinin değeri varsayılan olarak "İsimsiz" olarak belirlendi
Selam İsimsiz
selamla("Serhat") # Değer verirsek varsayılan değerin yerine bizim verdiğimiz değer geçer.
Selam Serhat
İşte bu kadar ! Peki birçok parametreye sahip olursak ne olacak ? Bir fonksiyon daha tanımlayalım
def bilgilerigöster(ad = "Bilgi Yok",soyad = "Bilgi Yok",numara = "Bilgi Yok"):
print("Ad:",ad,"Soyad:",soyad,"Numara:",numara)
bilgilerigöster() # Bütün parametreler varsayılan değerle ekrana basılacak.
Ad: Bilgi Yok Soyad: Bilgi Yok Numara: Bilgi Yok
bilgilerigöster("Mustafa Murat","Coşkun") # ad ve soyad değerini verdik ancak numara parametresi varsayılan değer oldu.
Ad: Mustafa Murat Soyad: Coşkun Numara: Bilgi Yok
Ancak böyle bir durumda argümanları gönderirken değerleri sıralı vermemiz gerekiyor. Peki sadece numara parametresine değer vermek istersek ne yapacağız ?
bilgilerigöster(numara = "123456") # numara parametresini özel olarak belirtiyoruz.
Ad: Bilgi Yok Soyad: Bilgi Yok Numara: 123456
bilgilerigöster(ad = "Mustafa Murat",numara = "123456")
Ad: Mustafa Murat Soyad: Bilgi Yok Numara: 123456
Aslında biz varsayılan değerleri kursumuzun en başlarında görmüştük. print fonksiyonunun sep parametresini hatırlayalım.
print("Mustafa","Murat","Coşkun") # sep parametresine değer vermeyince varsayılan olarak boşluk karakteri verildi.
Mustafa Murat Coşkun
print("Mustafa","Murat","Coşkun",sep = "/") # sep parametresine özel olarak değer atadık.
Mustafa/Murat/Coşkun
İsterseniz print fonksiyonun nasıl yazıldığına help fonksiyonu sayesinde bakalım.
help(print) # sep parametresine varsayılan olarak boşluk değeri verildiğini görebiliyoruz.
Help on built-in function print in module builtins: print(...) print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) Prints the values to a stream, or to sys.stdout by default. Optional keyword arguments: file: a file-like object (stream); defaults to the current sys.stdout. sep: string inserted between values, default a space. end: string appended after the last value, default a newline. flush: whether to forcibly flush the stream.
Biliyorsunuz bir fonksiyon yazıldığında özel olarak kaç tane parametresi olacağını önceden belirtmemiz gerekiyor. Örneğin, bir toplama fonksiyonu yazalım.
def toplama(a,b,c):
print(a+b+c)
toplama(3,4,5)
12
toplama(3,4,5,6) # 4 tane argüman veremeyiz.
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-26-aeb23284c8f3> in <module>() ----> 1 toplama(3,4,5,6) # 4 tane argüman veremeyiz. TypeError: toplama() takes 3 positional arguments but 4 were given
Eğer bu fonksiyonu 4 argüman alacak şekilde tanımlamak istersek, tekrardan tanımlamamız gerekiyor.
def toplama(a,b,c,d):
print(a+b+c+d)
toplama(3,4,5,6)
18
toplama(3,4,5) # Ancak bu sefer de 3 argüman veremiyoruz.
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-30-35c9fb4ed348> in <module>() ----> 1 toplama(3,4,5) # Ancak bu seferde 3 argüman veremiyoruz. TypeError: toplama() missing 1 required positional argument: 'd'
Peki ben bir fonksiyonu esnek sayıda argümanla kullanmak istersem ne yapacağım ? Bunun için de Yıldızlı Parametre kullanmam gerekiyor. Kullanımı şu şekildedir;
def toplama(*parametreler): # Artık parametreler değişkenini bir demet gibi kullanabilirim.
toplam = 0
print("Parametreler:",parametreler)
for i in parametreler:
toplam += i
return toplam
print(toplama(3,4,5,6,7,8,9,10))
Parametreler: (3, 4, 5, 6, 7, 8, 9, 10) 52
print(toplama())
Parametreler: () 0
print(toplama(1,2,3))
Parametreler: (1, 2, 3) 6
print fonksiyonunu tekrar hatırlayacak olursak aslında print fonksiyonu bu şekilde tanımlanmış bir fonksiyondur. Çünkü biz print fonksiyonuna istediğimiz sayıda argüman gönderebiliyorduk.
print(3,4,5,6)
3 4 5 6
print("Elma","Armut")
Elma Armut
Bu konuda gördüğümüz gibi Python'ın bu özelliklerini kullanarak daha esnek fonksiyonlar yazabiliriz. Bir sonraki konuda Global ve Yerel değişkenleri öğrenmeye çalışacağız.