Şu eğitimden: Python için Programlama Kavramları
Fonksiyonlar - Python Eğitimi
Şu eğitimden: Python için Programlama Kavramları
Fonksiyonlar
- Programlamayı öğrenirken herkese öğretilen ilk şeylerden biri, bir fonksiyonun nasıl oluşturulacağıdır. Sözdizimi veya işlevler dilden dile değişebilir, ancak genel kavram her zaman aynıdır. Bir işlev, bazı girdi değerlerini alabilen veya almayabilen bir rutin veya prosedürdür ve bir tür işlem gerçekleştirir ve ardından muhtemelen bir çıktı değeri döndürür. Her programlama kursu size o belirli dilde işlevlerin nasıl oluşturulacağını öğretecektir. Sıklıkla gözden kaçan şey, neden fonksiyonlar oluşturmanız gerektiği ve belirli bir süreci ne zaman bir fonksiyona dönüştürmeniz veya dönüştürmemeniz gerektiği sorusudur. Kısa cevap, yaygın olarak kullanılan rutinler için fonksiyon oluşturulmalıdır. Bu konsepti göstermek için mutfağa gidelim ve her gün yaptığım bir rutine bakalım. Günaydın. Her gün uyandığımda, güne başlamak için kendime doyurucu bir kahvaltı hazırlamayı severim. Bu kahvaltıyı pişirmenin birçok adımı var. Her zaman kahve yaparım, biraz yumurta çırpabilirim, biraz tost yapabilirim ve tabii ki sonunda yerim. Kahvaltı hazırlama sürecindeki bu adımların her biri daha birçok küçük adımdan oluşur. Örneğin, kahve yapma işlemi, kahve çekirdeklerinin ölçülmesini, kahve çekirdeklerinin öğütülmesini, öğütülmüş kahve çekirdeklerinin filtreye konulmasını, suyun ölçülmesini, kahve makinesinin çalıştırılmasını ve son olarak kahvenin dökülmesini içerir. Bu süreçte pek çok adım vardı, ama bu adımlar her kahve yaptığımda tamamen aynı olacak ve bu yüzden bu adımları zihinsel bir işleve birleştirmeye karar verdim. Şimdi, kahve yapmaya karar verdiğimde, beynim otomatik pilota geçiyor ve tüm bunları her adımı açıkça düşünmek zorunda kalmadan yapıyorum. Hmm. Kahve yapmak, kahvaltı rutinimin zihinsel bir işleve dönüştürdüğüm parçalarından sadece biri. Öyleyse başka bir kahvaltı sürecini parçalayalım, omlet yapalım. Omlet yapmak için malzemelerimi bir kapta karıştırarak başlıyorum, o karışımı bir tavaya döküyorum. Omletin bir tarafını pişiriyorum, çeviriyorum, diğer tarafını pişiriyorum ve bu işlemin çıktısı bir omlet oluyor. Süslü bir şey değil, ama ben bir bilgisayar programcısıyım, şef değil. Tıpkı kahve yapımında olduğu gibi, omlet yapma sürecini de işlevsel hale getirdim. Bu, eşim Olivia benden kahvaltıda omlet yapmamı isterse, malzemeleri karıştırıp, tavaya dökerek vb. adımların her birini bana söylemek zorunda olmadığı anlamına gelir. Söylemesi gereken tek şey... - Bana bir omlet yap lütfen? - Ve tam olarak ne yapacağımı biliyorum. Python'da bir fonksiyon olarak omlet yapım sürecine bakalım. Codespaces ortamımda açık olan örnek betiğim functions_begin.py var. İşlevsel bir kahvaltı hazırlamak için kullanalım. Mevcut durumunda, bu senaryo omlet yapım sürecimizdeki her adımı temsil eden bir dizi basılı ifadeden ibarettir. Python pek çok şey yapabilir, ancak aslında gerçek hayattaki bir omlet yapamaz, bu yüzden biraz hayal gücü kullanmamız gerekecek. Adımlar, malzemelerin karıştırılmasını, karışımın bir tavaya dökülmesini, ilk tarafın pişirilmesini, çevrilmesini ve ardından diğer tarafın pişirilmesini içerir. İşlem sonunda az önce pişirdiğimiz lezzetli omleti anlatan yeni bir string nesnesi oluşturur ve bunu omlet adında bir değişkene atar. Düzenleyicinin üst kısmındaki tümünü çalıştır okuna tıklayarak bu komut dosyasını Codespaces düzenleyicisinde çalıştıracağım ve komut dosyasının omlet yapım sürecindeki bu beş adımı yazdırdığını görebiliriz. Sonuçta ortaya çıkan ve ürettiği omlet adlı dizeyi de görüntülemek istersek, komut dosyasının sonunda omleti yazdırmak için bir print deyimi kullanabiliriz. Ve betiği tekrar çalıştırırsak, çıktının son satırında lezzetli omleti görebiliriz. Yani bu benim için yemem gereken bir omletti, ama ya Olivia kahvaltıda da omlet isterse? Bu durumda, onun için ikinci bir omlet oluşturmak için tüm bu adımları tekrarlamamız gerekecek. Bunu başarabilmemizin bir yolu, süreçteki tüm bu adımları tekrar yazmak olabilir, ancak zaman uğruna, sadece kopyala yapıştır kullanalım ve değişken adlarını omlet1 ve omlet2 olacak şekilde değiştirelim, böylece onları ayırt edebiliriz. Ayrıca, omlet1'i görüntülemek için sondaki print deyimini değiştireceğiz ve ardından omlet2 için ondan sonra ikinci bir yazdırma ifadesi ekleyeceğiz. Şimdi, senaryoyu çalıştırdığımda, iki kez omlet yapmak için adımlardan geçiyor ve sonunda, son iki baskı ifadesi bize iki lezzetli omletimiz olduğunu gösteriyor. Bu senaryo Olivia ve benim için kahvaltıyı başarıyla hazırladı. Peki ya iki omletten daha fazlasını yapmamız gerekirse? Diyelim ki Olivia bir grup arkadaşını kahvaltıya davet etmeye karar verdi. Her seferinde başka bir omlet yapmamız gerektiğinde tüm adımları manuel olarak kopyalamaya devam edersek, komut dosyası gerçekten çok uzun olur ve bir komut dosyası ne kadar uzun olursa, hata içerme olasılığı o kadar artar. Aynı işlem sırasını gerçekleştirdiğimiz için, her omlet yaptığımızda, bu adımları tek bir işlevde birleştirmek için mükemmel bir senaryodur. Öyleyse şimdi bunu yapalım. Bir fonksiyonu kullanabilmemiz için önce onu tanımlamamız gerekir. Bu yüzden betiğin en üstüne def yazacağım ve bu, Python'a yeni bir fonksiyon tanımladığımızı bildiren anahtar kelime. Bu işleve bir ad vereceğiz, make_omelette ve ardından açık ve kapalı parantezler ve ardından iki nokta üst üste ekleyeceğiz. Bir işlevi tanımlamak için belirli sözdizimi, farklı dillerde programlama yapıyorsanız değişebilir, ancak Python'da bu şekilde yapılır. Şimdi omlet yapmak için tüm bu adımları bu yeni make_omelette işlevine koyalım. Python, belirli bir kod satırının, işlev tanımı gibi başka bir şeyin kapsamında var olduğunu göstermek için girinti kullanır. Bu nedenle, tüm bu yazdırma deyimlerini make_omelette işlevinin bir parçası haline getirmek için girintilememiz gerekecek. Artık ihtiyacımız olmayacağı için ikinci yazdırma deyimleri grubunu da silebiliriz. Bu noktada, make_omelette adında bir fonksiyon tanımladık ve bu fonksiyonu her kullandığımızda, adımları yazdıracak ve lezzetli bir omleti tanımlayan yeni bir dize oluşturacaktır. Ama yapmamız gereken bir şey daha var. Bu fonksiyonun içinde sadece lezzetli omleti anlatan dizenin var olmasını istemiyoruz. make_omelette fonksiyonunu çağırdığımızda, bu dizeyi çıktı olarak geri almak isteyeceğiz. Bunu yapmak için, fonksiyonun sonuna return omlet ifadesini ekleyebiliriz ve ayrıca omlet1 olan değişken adını tekrar sadece omlet olarak değiştiririz. Bu fonksiyon çalışırken, 10. satırdaki return ifadesine geldiğinde, program fonksiyondan çıkacak ve lezzetli omleti tanımlayan dizeyi çıktı olarak iletecektir. Şimdi fonksiyonumuz tamamlandı, o yüzden onu kullanalım. Sonunda bu iki yazdırma ifadesini sileceğim. Sonra yeni make_omelette fonksiyonumuzu arayarak kendime kahvaltı hazırlayacağım ve ayrıca kibar olup Olivia için de omlet yapmalıyım. Son olarak, ilgili kahvaltı değişkenlerimizin içeriğini yazdırarak Olivia ve benim kahvaltıda ne yediğimizi göstermek için iki basılı ifade ekleyeceğim. Şimdi, tüm bu komut dosyasını yeniden çalıştırmak için çalıştır okuna tıkladığımda, omlet yapmak için tüm adımları iki kez gerçekleştiriyor ve sonunda, hem Olivia'nın hem de benim kahvaltıda lezzetli omletler yediğimizi görebiliyoruz. Kusursuz. Artık bir omlet yapma işlevimiz olduğuna ve onu test ettiğimize ve işe yaradığını bildiğimize göre, kendimiz için istediğimiz kadar omlet oluşturmak ve arkadaşlarımızı kahvaltıda ağırlamak için tekrar tekrar kullanabiliriz. Bu örnek, kodu işlevler halinde düzenlemenin en önemli avantajlarından birini, yeniden kullanımı gösterir. Omlet yapma fonksiyonumuzu bir kere yazdık ve artık rahatlıkla tekrar tekrar kullanabiliyoruz. İşlev, omleti karıştırma, pişirme ve çevirme gibi tüm ara adımları gerçekleştirir, böylece her omlet yapmamız gerektiğinde bu adımları manuel olarak tekrarlama konusunda endişelenmemize gerek kalmaz.