Python Fonksiyon Argümanları
Python’da değişken sayıda argüman alan bir fonksiyon tanımlayabilirsiniz. Bu makalede, varsayılan, anahtar kelime ve isteğe bağlı bağımsız değişkenleri kullanarak bu tür işlevleri tanımlamayı öğreneceksiniz.
Argümanlar
Kullanıcı tanımlı fonksiyon başlığında fonksiyon tanımlamayı ve çağırmayı öğrendik. Aksi takdirde, işlev çağrısı bir hatayla sonuçlanacaktır. İşte bir örnek.
1 2 3 4 5 6 | def greet(name, msg): """This function greets to the person with the provided message""" print("Hello", name + ', ' + msg) greet("Monica", "Good morning!") |
Çıktı
1 | <samp>Merhaba Monica, Günaydın!</samp> |
Burada fonksiyonun greet()
iki parametresi vardır.
Bu fonksiyonu iki argüman ile çağırdığımız için sorunsuz çalışıyor ve herhangi bir hata almıyoruz.
Farklı sayıda argüman ile çağırırsak, yorumlayıcı bir hata mesajı gösterecektir. Aşağıda, ilgili hata mesajlarıyla birlikte bir ve hiçbir argüman içermeyen bu işleve yapılan bir çağrı yer almaktadır.
1 2 | <samp>>>> greet("Monica") # sadece bir argüman TypeError: greet() 1 gerekli konum bağımsız değişkeni eksik: 'msg'</samp> |
1 2 | <samp>>>> greet() # argüman yok TypeError: greet() gerekli 2 konumsal bağımsız değişken eksik: 'ad' ve 'mesaj'</samp> |
Değişken Fonksiyon Argümanları
Şimdiye kadar, fonksiyonların sabit sayıda argümanı vardı. Python’da değişken sayıda argüman alabilen bir fonksiyon tanımlamanın başka yolları da vardır.
Bu tipin üç farklı formu aşağıda açıklanmıştır.
Python Varsayılan Argümanları
İşlev bağımsız değişkenleri Python’da varsayılan değerlere sahip olabilir.
Atama operatörünü (=) kullanarak bir argümana varsayılan bir değer sağlayabiliriz. İşte bir örnek.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | def greet(name, msg="Good morning!"): """ This function greets to the person with the provided message. If the message is not provided, it defaults to "Good morning!" """ print("Hello", name + ', ' + msg) greet("Kate") greet("Bruce", "How do you do?") |
Çıktı
1 2 | <samp>Merhaba Kate, Günaydın! Merhaba Bruce, Nasılsın?</samp> |
Bu işlevde, parametrenin name
varsayılan bir değeri yoktur ve arama sırasında gereklidir (zorunlu).
Öte yandan, parametrenin msg
varsayılan değeri "Good morning!"
. Bu nedenle, bir arama sırasında isteğe bağlıdır. Bir değer sağlanırsa, varsayılan değerin üzerine yazılır.
Bir işlevdeki herhangi bir sayıda bağımsız değişken varsayılan bir değere sahip olabilir. Ancak bir kez varsayılan argümanımız olduğunda, sağındaki tüm argümanların da varsayılan değerlere sahip olması gerekir.
Bu, varsayılan olmayan argümanların varsayılan argümanları takip edemeyeceği anlamına gelir. Örneğin, yukarıdaki fonksiyon başlığını şu şekilde tanımlamış olsaydık:
1 | def selam(msg = "Günaydın!", isim): |
Şu şekilde bir hata alırdık:
1 | <samp>SyntaxError: varsayılan olmayan bağımsız değişken, varsayılan bağımsız değişkeni takip eder</samp> |
Python Anahtar Kelime Argümanları
Bazı değerlere sahip bir fonksiyon çağırdığımızda, bu değerler konumlarına göre argümanlara atanır.
Örneğin, yukarıdaki fonksiyonda greet()
, onu olarak adlandırdığımızda greet("Bruce", "How do you do?")
, değer "Bruce"
argümana atanır.isimve benzer "How do you do?"
şekildemesaj.
Python, işlevlerin anahtar kelime argümanları kullanılarak çağrılmasına izin verir. Fonksiyonları bu şekilde çağırdığımızda argümanların sırası (konumu) değiştirilebilir. Yukarıdaki işleve yapılan aşağıdaki çağrıların tümü geçerlidir ve aynı sonucu verir.
1 2 3 4 5 6 7 8 | # 2 keyword arguments greet(name = "Bruce",msg = "How do you do?") # 2 keyword arguments (out of order) greet(msg = "How do you do?",name = "Bruce") 1 positional, 1 keyword argument greet("Bruce", msg = "How do you do?") |
Gördüğümüz gibi, bir fonksiyon çağrısı sırasında konumsal argümanları anahtar kelime argümanlarıyla karıştırabiliriz. Ancak anahtar kelime argümanlarının konumsal argümanları takip etmesi gerektiğini aklımızda tutmalıyız.
Anahtar kelime argümanlarından sonra konumsal bir argümana sahip olmak hatalara neden olur. Örneğin, işlev çağrısı aşağıdaki gibi:
1 | greet(name="Bruce","How do you do?") |
Bir hatayla sonuçlanacak:
1 | <samp>SyntaxError: arg anahtar sözcüğünden sonra anahtar sözcük olmayan arg</samp> |
Python Keyfi Argümanlar
Bazen bir fonksiyona geçirilecek argüman sayısını önceden bilemeyiz. Python, bu tür durumları, isteğe bağlı sayıda argüman içeren işlev çağrıları yoluyla ele almamızı sağlar.
İşlev tanımında, bu tür bir argümanı belirtmek için parametre adından önce bir yıldız işareti (*) kullanırız. İşte bir örnek.
1 2 3 4 5 6 7 8 9 10 | def greet(*names): """This function greets all the person in the names tuple.""" # names is a tuple with arguments for name in names: print("Hello", name) greet("Monica", "Luke", "Steve", "John") |
Çıktı
1 2 3 4 | <samp>Merhaba Monica merhaba Luke Merhaba Steve merhaba John</samp> |
Burada, fonksiyonu birden çok argümanla çağırdık. Bu argümanlar, fonksiyona aktarılmadan önce bir demete sarılır. Fonksiyonun içinde, for
tüm argümanları geri almak için bir döngü kullanırız.