İşlevler anahtar kelime = değer şeklindeki anahtar
kelimelerle de çağırılabililer. Örneğin şu işlev:
def otomobil(yakit, hareket=' uçar', model='Anadol'):
print "Eğer", yakit, "koyarsan bu", model, hareket
aşağıdaki gibi çağırılabilir:
otomobil('roket yakıtı')
otomobil(hareket = 'dans eder', yakıt = 'zeytin yağı' )
otomobil('ispirto', model = 'Kartal')
otomobil('su','bozulur','Şahin')
Şu çağrılar ise hatalıdır:
otomobil() # gerekli argüman eksik
otomobil(yakıt = 'su','zeytin yağı') # anahtar kelimeden sonra gelen
# anahtar kelime olmayan argüman
otomobil('mazot', yakit = 'benzin') # aynı argüman için iki değer
otomobil(sehir = 'İzmir') # bilinmeyen anahtar kelime
Genel olarak, argüman listesinin başında konuma bağlı argümanlar
bulunur ve anahtar kelime argümanlar onları izler; anahtar kelime
adları da işlevin parametrelerinden seçilir. Parametrenin öntanımlı
değerlerinin olup olmaması önemli değildir. Bir argüman birden
fazla değer alamaz; konuma bağlı parametre isimleri aynı çağrıda
anahtar kelime olarak kullanılamazlar. İşte bundan dolayı hatalı
olan bir örnek:
>>> def function(a):
... pass
...
>>> function(0, a=0)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: keyword parameter redefined
Eğer işlev tanımındaki son parametre
**isim şeklinde
ise bu parametre adları herhangi bir parametre olmayan anahtar kelime
şeklindeki argümanların bulunduğu bir sözlük olur.
Bu
*isim (bu konu
Sözlükler (Çağrışımlı Listeler)
bölümünde anlatılacaktır.) şeklindeki bir parametre ile de kullanılabilir, ki
bu parametre listesi içinde bulunmayan konuma bağlı argümanları içeren
bir demet (daha sonra
Demetler (tuples) bölümünde
incelenecek bir veri türüdür) olur.
*isim parametresi
**isim parametresinden önce gelmelidir. Buna örnek işlev:
def kasapdukkani(etCinsi,*argumanlar, **anahtarKelimeler):
print "--", etCinsi, "var mi ?"
print "-- Maalesef", etCinsi, "kalmadı."
for arg in argumanlar:
print arg
print '-'*40
anahtarlar = anahtarKelimeler.keys()
anahtarlar.sort()
for ak in anahtarlar:
print ak, ':', anahtarKelimeler[ak]
Şu şekilde çağrılabilir:
kasapdukkani('martı eti',"Çok lezzetli.",
"Çok satılıyor.",
musteri = 'Martı Murat',
kasap = 'Dev İsmail')
ve doğal olarak şu çıktıyı verir:
-- martı eti var mi ?
-- Maalesef martı eti kalmadı.
Çok lezzetli.
Çok satılıyor.
----------------------------------------
kasap : Dev İsmail
musteri : Martı Murat
anahtarKelimeler isimli sözlüğün içeriği yazdırılmadan
önce anahtar kelime isimleri listesinin sort()
yönteminin çağırıldığına dikkat edin; bu yapılmaz ise argümanların hangi
sıra ile yazılacağı tanımlanmamış olur.