Pythondaki fonksiyonlara istediğiniz sayıda parametre verebilirsiniz. Mesela şöyle bir fonksiyon tanımlayabilirsiniz:
Yine burada, kodlarımızın çirkin bir görüntü oluşturmaması için öğeleri nasıl alt satıra geçirdiğimize dikkat edin. Eğer Python kodlarına duyarlı bir metin düzenleyici kullanıyorsanız (mesela IDLE) virgül işaretlerinden sonra ENTER tuşuna bastığınızda düzgün girinti yapısı otomatik olarak oluşturulacaktır.
Bu kodlarda öncelikle kayit_ekle() adlı bir fonksiyon tanımladık. Bu fonksiyon toplam altı adet parametre alıyor. Bunlar; isim, soyisim, sehir, meslek, tel ve adres.
Tanımladığımız bu fonksiyonun gövdesinde ilk olarak kayit adlı bir sözlük oluşturduk. Bu sözlük, ekleyeceğimiz bağlantıya dair bilgileri tutacak. Daha sonra, oluşturduğumuz bu sözlüğe öğe ekliyoruz. Buna göre, fonksiyon parametrelerinden olan isim ve soyisim; kayit adlı sözlükteki anahtar kısmını oluşturacak. sehir, meslek, tel ve adres değerleri ise kayit adlı sözlükteki değer kısmını meydana getirecek.
Sözlüğü oluşturduktan sonra ekrana Bağlantı bilgileri kayıtlara eklendi! biçiminde bir mesaj yazdırıyoruz.
Daha sonra da kayıt adlı sözlüğün öğelerini belli bir düzen çerçevesinde ekrana yazdırıyoruz.
Bu işlemi nasıl yaptığımıza dikkat edin. Python sözlüklerinde items() adlı bir metot bulunur. Bu metot yardımıyla bir sözlük içinde bulunan bütün anahtar ve değer çiftlerini elde edebiliriz. Dilerseniz buna bir örnek verelim. Diyelim ki elimizde şöyle bir sözlük var:
Şimdi items() metodunu bu sözlük üzerine uygulayalım:
Gördüğünüz gibi, sozluk adlı sözlüğe ait bütün anahtar ve değerler bir liste içinde demetler halinde toplandı. Şimdi şöyle bir şey yazalım:
Buradan şöyle bir çıktı alırız:
items() metodunun ne işe yaradığını gördüğümüze göre biz tekrar kayit_ekle() fonksiyonumuzu incelemeye devam edebiliriz. Biraz önce anlattığımız gibi, kayit_ekle() fonksiyonu içindeki for k, v in kayit.items(): satırında k değişkeni kayit adlı sözlükteki anahtarları, v değişkeni ise aynı sözlükteki değerleri temsil ediyor. Böylece sözlükteki anahtar ve değer çiftlerini birbirinden ayırmış olduk.
Bu işlemi yaptıktan sonra, öncelikle k değişkenini ekrana yazdırıyoruz. Yani kayit adlı sözlükteki anahtar kısmını almış oluyoruz. Bu kısım, fonksiyondaki isim ve soyisim parametrelerinin değerini gösteriyor... print -*len(k) satırı ise, bir önceki satırda ekrana yazdırdığımız isim ve soyismin altına, isim ve soyisim değerlerinin uzunluğu kadar çizgi çekmemizi sağlıyor. Böylece isim ve soyismi, fonksiyondaki öteki bilgilerden görsel olarak ayırmış oluyoruz.
En son olarak da kayit adlı sözlüğün değer kısmındaki öğeleri tek tek ekrana yazdırıyoruz...
Fonksiyonumuzu başarıyla tanımladıktan sonra sıra geldi bu fonksiyonu çağırmaya...
Fonksiyonumuzu sırasıyla, Orçun, Kunek, Adana, Şarkıcı, 0322 123 45 67 ve Baraj Yolu argümanlarıyla birlikte çağırıyoruz. Böylece bu kodları çalıştırdığımızda şöyle bir çıktı elde ediyoruz:
İsterseniz, kayit_ekle() fonksiyonundaki parametreleri kendiniz yazmak yerine kullanıcıdan almayı da tercih edebilirsiniz. Mesela şöyle bir şey yazabilirsiniz:
Yukarıdaki fonksiyonları kullanırken dikkat etmemiz gereken çok önemli bir nokta var. kayit_ekle() adlı fonksiyonu kullanırken argüman olarak vereceğimiz değerlerin sırası büyük önem taşıyor. Yani bu değerleri, fonksiyon tanımındaki sıraya göre yazmamız gerek. Buna göre kayit_ekle() fonksiyonunu çağırırken, ilk argümanımızın isim, ikincisinin soyisim, üçüncüsünün şehir, dördüncüsünün meslek, beşincisinin telefon, altıncısının ise adres olması gerekiyor. Aksi halde, bizim yukarıda verdiğimiz örnekte çok belli olmasa da, fonksiyondan alacağımız çıktı hiç de beklediğimiz gibi olmayabilir. Ancak takdir edersiniz ki, bu kadar fazla sayıda parametrenin sırasını akılda tutmak hiç de kolay bir iş değil. İşte bu noktada Pythondaki isimli argümanlar devreye girer ve bizi büyük bir dertten kurtarır. Nasıl mı? İsterseniz yukarıda verdiğimiz örnekten yararlanalım:
Gördüğünüz gibi, kayit_ekle() adlı fonksiyonumuzun argümanlarını isimleriyle birlikte çağırıyoruz. Böylece argümanları sıra gözetmeden kullanma imkânımız oluyor. Bizim örneğimizde bütün parametreler karakter dizilerinden oluştuğu için, isimli parametre kullanmanın faydası ilk bakışta pek belli olmuyor. Ama özellikle sayılar ve karakter dizilerini karışık olarak içeren fonksiyonlarda yukarıdaki yöntemin faydası daha belirgindir... Mesela şu örneğe bakalım:
İşte bu örnekte, parametre/argüman sıralamasının önemi ortaya çıkar. Eğer burada mesela Ahmet Öncel argümanıyla 3500 argümanının yerini değiştirirseniz programınız hata verecektir. Çünkü bu fonksiyonda biz 3500 sayısını kullanarak aritmetik bir işlem yapıyoruz. Eğer 3500ün olması gereken yerde bir sayı yerine karakter dizisi olursa aritmetik işlem yapılamaz... Bu arada yukarıdaki fonksiyonun sağa doğru çok fazla yayılarak çirkin bir kod görüntüsü vermemesi için satırları nasıl alta kaydırdığımıza dikkat edin.
Yukarıdaki örneği, isimli argümanları kullanarak yazarsak sıralama meselesini dert etmemize gerek kalmaz:
Teknik olarak söylemek gerekirse Python fonksiyonlarında öğe sıralamasının önem taşıdığı argümanlara sıralı argüman adı verilir. Yabancılar buna positional argument diyor... Python fonksiyonlarında sıralı argümanlardan bolca yararlanılır. Ancak argüman sayısının çok fazla olduğu durumlarda isimli argümanları kullanmak da işinizi bir hayli kolaylaştırabilir.
Kod:
def kayit_ekle(isim, soyisim, sehir, meslek, tel, adres): kayit = {} kayit["%s %s" %(isim, soyisim)] = [sehir, meslek, tel, adres] print "Bağlantı bilgileri kayıtlara eklendi!\n" for k, v in kayit.items(): print k print "-"*len(k) for i in v: print i kayit_ekle("Orçun", "Kunek", "Adana", "Şarkıcı", "0322 123 45 67", "Baraj Yolu")
Yine burada, kodlarımızın çirkin bir görüntü oluşturmaması için öğeleri nasıl alt satıra geçirdiğimize dikkat edin. Eğer Python kodlarına duyarlı bir metin düzenleyici kullanıyorsanız (mesela IDLE) virgül işaretlerinden sonra ENTER tuşuna bastığınızda düzgün girinti yapısı otomatik olarak oluşturulacaktır.
Bu kodlarda öncelikle kayit_ekle() adlı bir fonksiyon tanımladık. Bu fonksiyon toplam altı adet parametre alıyor. Bunlar; isim, soyisim, sehir, meslek, tel ve adres.
Tanımladığımız bu fonksiyonun gövdesinde ilk olarak kayit adlı bir sözlük oluşturduk. Bu sözlük, ekleyeceğimiz bağlantıya dair bilgileri tutacak. Daha sonra, oluşturduğumuz bu sözlüğe öğe ekliyoruz. Buna göre, fonksiyon parametrelerinden olan isim ve soyisim; kayit adlı sözlükteki anahtar kısmını oluşturacak. sehir, meslek, tel ve adres değerleri ise kayit adlı sözlükteki değer kısmını meydana getirecek.
Sözlüğü oluşturduktan sonra ekrana Bağlantı bilgileri kayıtlara eklendi! biçiminde bir mesaj yazdırıyoruz.
Daha sonra da kayıt adlı sözlüğün öğelerini belli bir düzen çerçevesinde ekrana yazdırıyoruz.
Bu işlemi nasıl yaptığımıza dikkat edin. Python sözlüklerinde items() adlı bir metot bulunur. Bu metot yardımıyla bir sözlük içinde bulunan bütün anahtar ve değer çiftlerini elde edebiliriz. Dilerseniz buna bir örnek verelim. Diyelim ki elimizde şöyle bir sözlük var:
Kod:
>>> sozluk = {"programlama dili": "Python", ... "metin duzenleyici": "Kwrite"}
Şimdi items() metodunu bu sözlük üzerine uygulayalım:
Kod:
>>> print sozluk.items() [('programlama dili', 'Python'), ('metin duzenleyici', 'Kwrite')]
Gördüğünüz gibi, sozluk adlı sözlüğe ait bütün anahtar ve değerler bir liste içinde demetler halinde toplandı. Şimdi şöyle bir şey yazalım:
Kod:
>>> for k, v in sozluk.items(): ... print k, v
Buradan şöyle bir çıktı alırız:
Kod:
programlama dili Python metin düzenleyici Kwrite
items() metodunun ne işe yaradığını gördüğümüze göre biz tekrar kayit_ekle() fonksiyonumuzu incelemeye devam edebiliriz. Biraz önce anlattığımız gibi, kayit_ekle() fonksiyonu içindeki for k, v in kayit.items(): satırında k değişkeni kayit adlı sözlükteki anahtarları, v değişkeni ise aynı sözlükteki değerleri temsil ediyor. Böylece sözlükteki anahtar ve değer çiftlerini birbirinden ayırmış olduk.
Bu işlemi yaptıktan sonra, öncelikle k değişkenini ekrana yazdırıyoruz. Yani kayit adlı sözlükteki anahtar kısmını almış oluyoruz. Bu kısım, fonksiyondaki isim ve soyisim parametrelerinin değerini gösteriyor... print -*len(k) satırı ise, bir önceki satırda ekrana yazdırdığımız isim ve soyismin altına, isim ve soyisim değerlerinin uzunluğu kadar çizgi çekmemizi sağlıyor. Böylece isim ve soyismi, fonksiyondaki öteki bilgilerden görsel olarak ayırmış oluyoruz.
En son olarak da kayit adlı sözlüğün değer kısmındaki öğeleri tek tek ekrana yazdırıyoruz...
Fonksiyonumuzu başarıyla tanımladıktan sonra sıra geldi bu fonksiyonu çağırmaya...
Fonksiyonumuzu sırasıyla, Orçun, Kunek, Adana, Şarkıcı, 0322 123 45 67 ve Baraj Yolu argümanlarıyla birlikte çağırıyoruz. Böylece bu kodları çalıştırdığımızda şöyle bir çıktı elde ediyoruz:
Kod:
Bağlantı bilgileri kayıtlara eklendi! Orçun Kunek ----------- Adana Şarkıcı 0322 123 45 67 Baraj Yolu
İsterseniz, kayit_ekle() fonksiyonundaki parametreleri kendiniz yazmak yerine kullanıcıdan almayı da tercih edebilirsiniz. Mesela şöyle bir şey yazabilirsiniz:
Kod:
# -*- coding: utf-8 -*- def kayit_ekle(isim, soyisim, sehir, meslek, tel, adres): kayit = {} kayit["%s %s" %(isim, soyisim)] = [sehir, meslek, tel, adres] print "\nBağlantı bilgileri kayıtlara eklendi!\n" for k, v in kayit.items(): print k print "-"*len(k) for i in v: print i isi = raw_input("isim: ") soy = raw_input("soyisim: ") seh = raw_input("şehir: ") mes = raw_input("meslek: ") tel = raw_input("telefon: ") adr = raw_input("adres: ") kayit_ekle(isi, soy, seh, mes, tel, adr)
Yukarıdaki fonksiyonları kullanırken dikkat etmemiz gereken çok önemli bir nokta var. kayit_ekle() adlı fonksiyonu kullanırken argüman olarak vereceğimiz değerlerin sırası büyük önem taşıyor. Yani bu değerleri, fonksiyon tanımındaki sıraya göre yazmamız gerek. Buna göre kayit_ekle() fonksiyonunu çağırırken, ilk argümanımızın isim, ikincisinin soyisim, üçüncüsünün şehir, dördüncüsünün meslek, beşincisinin telefon, altıncısının ise adres olması gerekiyor. Aksi halde, bizim yukarıda verdiğimiz örnekte çok belli olmasa da, fonksiyondan alacağımız çıktı hiç de beklediğimiz gibi olmayabilir. Ancak takdir edersiniz ki, bu kadar fazla sayıda parametrenin sırasını akılda tutmak hiç de kolay bir iş değil. İşte bu noktada Pythondaki isimli argümanlar devreye girer ve bizi büyük bir dertten kurtarır. Nasıl mı? İsterseniz yukarıda verdiğimiz örnekten yararlanalım:
Kod:
# -*- coding: utf-8 -*- def kayit_ekle(isim, soyisim, sehir, meslek, tel, adres): kayit = {} kayit["%s %s" %(isim, soyisim)] = [sehir, meslek, tel, adres] print "\nBağlantı bilgileri kayıtlara eklendi!\n" for k, v in kayit.items(): print k print "-"*len(k) for i in v: print i kayit_ekle(isim = "Abdurrahman", soyisim = "Çelebi", meslek = "Öğretmen", tel = "0212 123 45 67", sehir = "İstanbul", adres = "Çeliktepe")
Gördüğünüz gibi, kayit_ekle() adlı fonksiyonumuzun argümanlarını isimleriyle birlikte çağırıyoruz. Böylece argümanları sıra gözetmeden kullanma imkânımız oluyor. Bizim örneğimizde bütün parametreler karakter dizilerinden oluştuğu için, isimli parametre kullanmanın faydası ilk bakışta pek belli olmuyor. Ama özellikle sayılar ve karakter dizilerini karışık olarak içeren fonksiyonlarda yukarıdaki yöntemin faydası daha belirgindir... Mesela şu örneğe bakalım:
Kod:
# -*- coding: utf-8 -*- def terfi_ettir(kisi, e_poz, y_poz, e_maas, z_orani): print "%s, %s pozisyonundan %s pozisyonuna terfi etmiştir!" \ %(kisi, e_poz, y_poz) print "Bu kişinin %s TL olan maaşı %s TL'ye yükseltilmiştir!" \ %(e_maas, e_maas + (e_maas * z_orani / 100)) terfi_ettir("Ahmet Öncel", "İş Geliştirme Uzmanı", "İş Geliştirme Müdürü", 3500, 25)
İşte bu örnekte, parametre/argüman sıralamasının önemi ortaya çıkar. Eğer burada mesela Ahmet Öncel argümanıyla 3500 argümanının yerini değiştirirseniz programınız hata verecektir. Çünkü bu fonksiyonda biz 3500 sayısını kullanarak aritmetik bir işlem yapıyoruz. Eğer 3500ün olması gereken yerde bir sayı yerine karakter dizisi olursa aritmetik işlem yapılamaz... Bu arada yukarıdaki fonksiyonun sağa doğru çok fazla yayılarak çirkin bir kod görüntüsü vermemesi için satırları nasıl alta kaydırdığımıza dikkat edin.
Yukarıdaki örneği, isimli argümanları kullanarak yazarsak sıralama meselesini dert etmemize gerek kalmaz:
Kod:
# -*- coding: utf-8 -*- def terfi_ettir(kisi, e_poz, y_poz, e_maas, z_orani): print "%s, %s pozisyonundan %s pozisyonuna terfi etmiştir!" \ %(kisi, e_poz, y_poz) print "Bu kişinin %s TL olan maaşı %s TL'ye yükseltilmiştir!" \ %(e_maas, e_maas + (e_maas * z_orani / 100)) terfi_ettir(e_maas = 3500, e_poz = "İş Geliştirme Uzmanı", kisi = "Ahmet Öncel", y_poz = "İş Geliştirme Müdürü", z_orani = 25)
Teknik olarak söylemek gerekirse Python fonksiyonlarında öğe sıralamasının önem taşıdığı argümanlara sıralı argüman adı verilir. Yabancılar buna positional argument diyor... Python fonksiyonlarında sıralı argümanlardan bolca yararlanılır. Ancak argüman sayısının çok fazla olduğu durumlarda isimli argümanları kullanmak da işinizi bir hayli kolaylaştırabilir.
