## 28. Değişkenler ve fonksiyonlar

Değişkenler fonksiyon tanımlamalarında çok işe yararlar. `print2` fonksiyonunu hatırlayın.

    >>> def print2():
    ...     print 2
    ...
    >>> print2()
    2

Bunu genelleştirirsek:

    >>> def print_number(n):
    ...     print n
    ...
    >>> print_number(2)
    2
    >>> print_number(78)
    78

Bir fonksiyon tanımlanırken bir değişkeni (bu durumda n) fonksiyonun adından hemen sonra parantez içerisinde yazarak, buna parametre diyeceğiz, Python'a fonksiyon çağrılırken parantez içerisinde verilen değer neyse onu n'e atamasını söylemiş oluruz.

### Sayıları ve Stringleri (Karakterler/Cümleler) birlikte kullanmak

Sayıları ve stringleri bir arada yazmak istediğimizi düşünelim. Demek istediğim şey `print_number()`fonksiyonu çalıştığında aşağıdaki gibi bir sonuç vermesi:

    The number you have chosen is 2.

Daha sonra göreceğiniz gibi bunu yapmanın pek çok yolu vardır. İşte bunlardan birisi, kolay anlaşılmayan ama çok kullanışlı bir yol.

    >>> def print_number(n):
    ....    print "The number you have chosen is %s." % n
    ....
    >>> print_number(3)
    The number you have chosen is 3.

Python string'in içerisindeki %s'i string'i takip eden %'ten sonraki değişkenin değeri ile değiştirir. Bunu kendiniz deneyin ve okumaya devam edin.

### İşi biraz zorlaştıralım

`greater()` fonksiyonuna geri dönelim ve onu daha genel bir hale getirelim. Bunu aşağıdaki gibi yapabiliriz:

    >>> def greater(first, second):
    ...     if first > second:
    ...         print "%s is greater than %s" % (first, second)
    ...     else:
    ...         print "%s is greater than %s" % (second, first)
    ...
    >>> greater(5, 4)
    5 is greater than 4
    >>> greater(0, 10)
    10 is greater than 0

String'in içerisindeki %s'lere karşılık gelen değişkenleri parantez içerisinde belirtmeliyiz ve başınada % işareti koymalıyız, böylece Python'a %s'lere karşılık gelen değişkenlerin neler olduğunu söylemiş oluruz.

Deneyin!

### İşi biraz daha zorlaştıralım

`greater()` fonksiyonunu değişkenler kullanarak sürekli aynı iki sayıyı karşılaştırır halden herhangi iki sayıyı karşılaştırır hale getirdik. Fonksiyon bu hali ile karşılaştırmayı yapmak için her zaman iki parametre gerektirir. Bazı sayıların 0'dan büyük olup olmadığını bulan bir fonksiyon yazmak isteyelim. Bu işi yapan bir başka fonksiyon yazabiliriz, ya da elimizdeki fonksiyonda küçük değişiklikler yaparsak:

    >>> def greater(first, second=0):
    ...     if first > second:
    ...         print "%s is greater than %s" % (first, second)
    ...     else:
    ...         print "%s is greater than %s" % (second, first)
    ...
    >>> greater(5, 4)
    5 is greater than 4
    >>> greater(1, 10)
    10 is greater than 1
    greater(5)
    >>> 5 is greater than 0
    greater(-2)
    >>> 0 is greater than -2

Fonksiyonu tanımlarken parantez içerisinde "`second=0`" yazarak, fonksiyonu yalnızca bir parametre ile çağırdığımızda, ikinci değişkenin değerinin 0 olmasını sağlıyoruz. Buna başlangıç (default değer) değeri de denir. Bir parametreye bu şekilde bir başlangıç değeri verildiğinde buna adlandırılmış parametre denilir.

Adlandırılmış parametreler (birden fazla olabilirler) her zaman adlandırılmamış parametrelerden sonra kullanılırlar. Bu kurala göre aşağıdaki tanımlamalar geçerlidir:

    >>> def four_arguments(a, b, c, d=33):
    >>> def four_arguments(a, b, c=7, d=2):
    >>> def four_arguments(a, b=1, c=3, d=56):
    >>> def four_arguments(a=4, b=1, c=3, d=0):

Ancak aşağıdakiler geçerli değildir:

    >>> def four_arguments(a=1, b, c, d=33):
    >>> def four_arguments(a, b=2, c, d=33):
    >>> def four_arguments(a=5, b=1, c=3, d):

Bunları kendi fonksiyonlarınızda deneyin.

### Önemli bir not

Python komutları değişken ismi olarak kullanılmaz. Aşağıdakini deneyin:

    >>> def = 2

ve ne olduğunu görün!

Değişkenler - - Adınız nedir?