Python Programlama Dili

Bölüm 1

Başlangıç Bilgileri

Top Navigasyon

Ders 2

1.8 - Fonksiyonların Tanıtımı

Bilgisayar programlama kültüründe, fonksiyonlar alt programlar olarak nitelendirilirler. Her program bir ana program ve çeşitli fonksiyonlardan oluşur. Ana program fonksiyonlara veri sağlar, fonksiyonlar ana programa veri döndürür, döndürülen değerler başka fonksiyonlar için veri oluşturur ve bir bilgisayar programı işlevini bu şekilde yürüterek sonuca ulaşır.

Bir bilgisayar programında, işlemlerin alt programlara dağıtılarak yürütülmesi, program yürüyüşünün kontrolünü olağanüstü kolaylaştırır. İşlemlerin fonksiyonlarda yapılarak sadece sonuçların ana programa döndürülmesi, programda aksayan yönlerin saptanması ve düzeltilmesi için olağanüstü olanaklar sağlar. Aksayan yönler ilgili fonksiyonlar içinde düzeltilerek, ana programın bunlardan etkilenmesi en aza indirilebilir.

Fonksiyonlar dışa kapalı birimlerdir. Fonksiyon içindeki program adımları fonksiyona özeldir. Dıştan sadece veri alır ve bu verileri ya kendisi kullanır veya bu verilerle çeşitli işlemler yaparak sonucu kendini çağıran program öğesine döndürür.

Her fonksiyonun mutlaka geriye değer döndürmesi beklenmez. Bazı fonksiyonlar sadece işlev yapar. Örnek olarak, aldığı verileri görüntüler. Buna rağmen, Python programlama dilinde tüm fonksiyonlar geriye ya bir değer ya da hiçbirşey anlamında, None değerini döndürür. Bir fonksiyonda return bildirimi varsa bir değer, yoksa None değeri döndürülür.

Tüm programlama dillerinde olduğu gibi, Python programlama dilinde de, fonksiyonlar bir şablon olarak tanımlanır. Python programlama dilinde, fonksiyonlar formal parametr denilen yer tutucu değerlerle tanımlanırlar. Fonksiyon tanımı tamamlanınca, formal parametrelerin yerine gerçek değerlerli argümanlar ile çağrılırlar. Gerçek değerli argümanlar, formal parametrelerle tanımlanmış işlemleri gerçekleştirirler ve oluşan gerçek değerler geriye döndürülür. Bir kez formal parametreler ile tanımlanmış olan bir fonksiyon, değişik argümanlar ile istenildiği kadar çağrılarak geriye hesapladığı değeri döndürür.

Python için fonksiyon tanımı EBNF formülasyonu şekli,

funcdef        ::=  [decorators] "def" funcname "(" [parameter_list] ")" ["->" expression] ":" suite
decorators ::= decorator+
decorator ::= "@" dotted_name ["(" [parameter_list [","]] ")"] NEWLINE
dotted_name ::= identifier ("." identifier)*
parameter_list ::= (defparameter ",")*
| "*" [parameter] ("," defparameter)* ["," "**" parameter]
| "**" parameter
| defparameter [","] )
parameter ::= identifier [":" expression]
defparameter ::= parameter ["=" expression]
funcname ::= identifier

şeklindedir.

Fonksiyon başlığı tanımının EBNF ifadesi ilk bakışta karmaşık gelebilirse de, aslında son derece basittir. Herşeyden önce, çoğu bilgi isteğe bağlıdır. Özellikle fonksiyon tanımında ["->" expression] şeklinde belirtilen isteğe bağlı terim, bir açıklama olup sadece kullanıcıya bir mesaj verme işlevi görür ve hemen hemen hiç kullanılmaz. Bazı isteğe bağlı terimler de çok ender kullanılır. İlk aşamada kullanacağımız bir fonksiyon başlığı EBNF kuralları aşağıda verilmiştir.

funcdef::=def qualified_name"([parameter , parameter*]):
parameter::= name[default_argument] | *name]
qualified_name::= identifier(","identifier)*
    

Fonksiyon başlığında varsayılan değeri olmayan tüm parametreler, varsayılan değerleri olan parametrelerden önce belirtilmelidir. Buna rağmen, her ikisi de * dan sonra istendiği düzende verilebilir.

Kalifiye isim (Qualified_name), tanımın yapıldığı modülü belirtmek amacı ile yapılır. Bu aşamada varsayılan modül altında çalıştığımızdan, sadece fonksiyon tanıtıcısının ismini vermek yeterli olacaktır.

Fonksiyon tanımı,

fonksiyon başlığı
["""
Docstring
"""]
fonksiyon içeriği
[return ifade;]

şeklindedir.

Docstring (Documentation String) tek satırlık veya çok satırlı bir yorumdur. Çok satırlı Docstring tanıtımları sadece birden çok satıra gereksinmesi olan tanıtımlar için uygulanır. Tek satıra sığabilecek Docstring tanıtımları, tek satırlı yorumlar olarak yerleştirilir.

Docstring tanıtımlarının yararı fonksiyonun işlevinin tanıtılmasıdır. Python komut satırı (Chevron) üzerine help <Fonksiyon Tanıtıcısı> yazılırsa, Chevron üzerinde Docstring olarak verilmiş olan bilgiler görüntülenir. Bu da, kullanıcıya, kullanacağı fonksiyonun işlevinin hatırlatılmasında yararlı olur.

Python programlama dilinin çok önemli bir özelliği olarak, fonksiyon adımları, dört boşluk bırakılarak içerlek yazılır. Fonksiyon içeriği bittikten sonra yine içerlek yazılmayan normal program satırları ile devam edilir.

Python programlama dilinde, fonksiyonlar geriye mutlaka bir değer döndürürler. Eğer bir return bildirimi yapılmışsa, bu bildirimi izleyen ifadenin değeri geri döndürülür. Eğer return bildirimi yoksa, fonksiyon geriye None değerini döndürür.

Python programlama dilinde fonksiyonlar gerçek nesnelerdir ve değişkenlere atanabilirler. Bu konulardaki örneklerle konular ilerledikçe karşılaşacağız

Fonksiyon içeriğine pass yazılırsa, derleyici bu fonksiyonu işlemeden pas geçer.

Örnek olarak bir fonksiyon,

def karesini_al(a):
return a*a;

Bu fonksiyonun tanımında, a ve b iki formal parametre (sadece parametre olarak da belirtilebilir) olarak tanımlanmışlardır. Bu formal paramaterlerin fonksiyon bünyesinde tanımlanan davranışları ve fonksionun geriye döndüreceği değerin, belirtilmesi, bir fonksiyon davranışı (behavior) ortaya çıkarır. Bu fonksiyon, gerçek değerli argümanlarla çağrılırsa, tanımlanmış fonksiyon davranışını uygulayarak bir sonuç değeri hesaplar ve bu değeri geri döndürür.

Bu fonksiyonun çağrılması,

karesini_al(a)

şeklinde gerçekleşir. Geriye döndürülen değer, ya bir değişkene atanır, ya görüntülenir, ya da başka bir işlem için kullanılır.

1.9 - Lambdalar

Lambdalar çok küçük bilgilerin uygulanması için yazılan isimsiz fonksiyonlardır. Bir değişkene atanarak isim kazanabilir ve tekrar çağrılabilirler. Lambda tanımı

def lambda(formal parametre1, formal parametre2, formal parametre3, ...): tek satırlık bildirim;

şeklindedir. Bir lambda tanım örneği, aşağıda görülmektedir.

def lambda a , b  : a  *  b;

Fonksiyon uygulamalarını ileride, veri tipleri ve programlama üzerine çalışırken yapacağız.