Tekrar hoş geldiniz.
Bu videoda önemli bir kavramdan, yani geri dönüşten bahsetmek istiyorum.
Python'da fonksiyonlarla çalışırken çokça göreceğimiz anahtar bir kelimedir.
Bir bakalım.
Diyelim ki sum adında bir fonksiyon yaratmak istiyorum, bu arada Python'da zaten var, ama biz kendi fonksiyonumuzu
yaratacağız ve bir numara için bir numara diyeceğim.
Ve iki numara, toplam fonksiyonumuz bir numara artı iki numarayı toplayacak, güzel ve basit bir fonksiyon.
Şimdi dört ve beş numara ile biraz çalışırsam, tahmin edin ne olacak?
Koşmaya gidiyorum.
Ve hiçbir şey olmuyor, bu sizin için şaşırtıcı olmayabilir çünkü hiçbir şey basmıyoruz.
Doğru.
Ama ya burada baskı yaparsam?
Bu değişiklik.
Bakalım.
Hmm.
Ben hiç almadım.
Beklediğin bu muydu?
Ve daha önce hiç görmedik, değil mi?
Yani, bir listemiz olduğu zamanları hatırlayın, diyelim ki bir, iki, üç, ve sonra onu temizlemek gibi
bir şey yaptık.
Bizim ED'de.
Bize bu küçük oku verdi ve hiçbir şey söylemedi.
Listelerde clear gibi bir şeyin asıl listeyi değiştirdiği, her şeyi temizlediği ve listeyi boşalttığı, ancak
yeni bir liste döndürmediği fikrinden bahsetmiştik.
Sadece mevcut listeyi değiştirir, ancak bunun yerine bize hiçbir şey döndürmez.
İşlevler de aynen böyledir.
Her zaman bir şey döndürmeleri gerekir ve burada return anahtar sözcüğü yokmuş gibi hiçbir şey döndürmediklerinde,
otomatik olarak hiçbir şey döndürmez.
Yani burada return gibi bir şey yoksa, her zaman hiçbir şey döndürmeyecektir.
Ancak geri dönüş eklersek, ikinci satıra geçer geçmez söyleyecektir.
Hey.
Bu fonksiyondan çıkmanızı istiyorum.
Ve bu fonksiyondan çıktığınızda, bu ifade bize ne veriyorsa onu döndürmenizi istiyorum.
Çalıştır'a tıklarsam.
Dokuz mu alacağım?
Bunu on artı beş olarak değiştirirsek, 15 elde ederiz.
Ve bu, fonksiyonlar için iyi bir genel kuraldır, çünkü fonksiyonlar iki şey yapabilir, doğru.
Birincisi, bir şey iade edebilir.
Yani fonksiyonun sonunda, her neyse, fonksiyon çalıştırıldıktan sonra, ya hiçbir şey döndürmeyiz
ya da bir tür değer, bir tür veri türü döndürürüz ya da hiçbir şey döndürmeyen ama belki bir şeyleri değiştiren
bir fonksiyona sahip olabiliriz.
Yani, örneğin, yazdırabilirim.
Merhaba.
Ve eğer buraya koşsaydım.
Hiçbirini döndürmüyorum çünkü böyle bir dönüş ifadem yok.
Ancak, benim fonksiyonum bir şeyi değiştiriyor.
Bu metnin görünüşü doğru mu?
Bizim için merhaba yazıyor.
Yani bir fonksiyon ya programımızdaki bir şeyi değiştirir ya da bir şey döndürür.
Ve bu, daha sonra fonksiyonel programlama hakkında konuştuğumuzda ele alacağımız oldukça gelişmiş
bir konudur.
Ancak fonksiyonlarla ilgili iyi bir kural şudur: Bir fonksiyon tek bir şeyi gerçekten iyi yapmalıdır.
Ve genellikle bir fonksiyon bir şey döndürmelidir.
Şimdi, bu, birden fazla şey yapan veya bir şey döndürmeyen herhangi bir işlevin kötü olduğu
anlamına gelmez.
Ancak kodunuzu basit ve okunabilir hale getirmek için bu iki kurala sahip olmak genellikle iyi bir uygulamadır.
Örneğin, burada yazdırma ve toplama işlemlerim varsa, bu işlev birden fazla şey yapıyor demektir.
Baskı konusunda endişeleniyor ve aynı zamanda bir şey hakkında da endişeleniyor.
Ve tanımı.
Bu fonksiyon toplam olarak adlandırılır.
Yani, bunu bilmiyor ya da görmüyor olsaydım ve tek yaptığım biraz koşmak olsaydı.
Bence baskının yüksek olması şaşırtıcı olurdu çünkü adı ne yaptığını tam olarak açıklamıyor.
Yani, bunun özetlenmesini bekliyorum.
Programım neden merhaba diyor?
Bu nedenle, fonksiyonumuzun tek bir şeyi ve sadece tek bir şeyi gerçekten iyi yaptığından emin olmak istiyoruz, çünkü daha sonra göreceğimiz
gibi, farklı fonksiyonları birleştirebilir ve birlikte çalıştırabiliriz.
Ve ayrıca bir şey döndürdüğümüzden emin olmak istiyoruz çünkü bu şekilde yapabileceğimiz şey
aslında bu dönüş değerini bir değişkene atayabiliriz.
Örneğin, toplam on toplamına eşittir diyebilirim.
Beş.
Ve bu fonksiyon bir şey döndürdüğünden ve tamamlandığında, çalışan değer olarak 15'e sahip olacaktır.
Bu bizim burada yaptığımızla aynı şey.
Ve işte işin güzel kısmı.
Şimdi belki toplamda 10'dan fazla koşabilirim.
Şimdi bunları teker teker inceleyelim.
Fonksiyonumu tanımladığımda, python yorumlayıcısı şöyle diyecektir: Pekala, some'ın ne olduğunu biliyorum.
Şimdi tanımladınız.
Bunu hafızamda tutacağım.
Yedinci satıra kadar devam edecek ve şöyle diyecek: Hey, bir toplam değişken istiyorum
ve bu toplam değişkenin on beş gibi bir değere eşit olmasını istiyorum.
Ve toplam python'a herhangi bir şey atamadan önce, yorumlayıcı bazı şeyler söyleyecek.
Yine ne var?
Oh, burada hatırlıyorum, hafızamda OC'de bazılarına on ve beş argüman vereceğim.
Bu yüzden gidip o işlevi çalıştıracak.
Bu kapanış parantezini bitirir bitirmez, toplamın içine girecek.
Diyecek ki, hey, bir numara ona eşit olacak, hey iki numara beşe eşit olacak.
Şimdi ikinci satıra geçiyoruz ve şöyle diyecek: Hey, senden on artı beşi toplamanı istiyorum çünkü bu değişkenlerin ne olduğunu
biliyorum.
Ve bunu bitirdiğinizde ve bu 15'e dönüştüğünde, geri dönmenizi istiyorum.
Böylece Python yorumlayıcısı, bazılarını çağırmayı bitirdiğinde, hey, 15 değerini
toplam değişkenine ata diyecek ve sonra bir sonraki satıra geçecektir.
Hey, bir şey yazdırmak istiyorum.
Ne yazdırmak istiyorsunuz?
Bunu basmak istiyorum.
Diyecek ki, hey, biraz ne var?
Bazılarının ne olduğunu biliyorum.
Hafızamda var.
Ve sonra tekrar, on diyecek.
Ve bir sonraki tartışma toplam olacaktır.
Hey, hadi toplanalım.
Hafızamı yoklayayım ve 15 olduğunu öğreneyim.
Yani 15 demek gibi bir şey.
Bu da fonksiyonların gücü, değil mi?
Bir şeyleri döndürüp değişkenlere atayabilir ve bu şekilde çağırabilirim.
Ve eğer bunu daha da basitleştirmek istersem, toplam yerine bazılarını çalıştırmaya
devam edebilirim.
Ve şuna bak.
Şimdi hepsini tek bir satırda topladım ve Çalıştır'a tıkladığımda
Tekrar.
Hâlâ çalışıyor.
Tamam.
Peki ya böyle bir şey yaparsak?
Bazılarını tanımla desem ve sonra buranın içinde başka bir şey tanımla desem ne olur?
Fonksiyonu ve bu fonksiyon bir ve iki numaralarını alır.
Ve burada, nihayet geri dönüyoruz, bir numara.
Ve iki numara.
Hmm.
Bunu test edelim.
Sizce ne olacak?
Öncelikle, toplamın 10 artı 20'ye eşit olduğunu varsayalım.
Ve sonra toplamı basacağım.
Çalıştır'a tıklarsam.
Ben hiç almadım.
Şimdi.
Nedenmiş o?
Ve bu sizin için açık olmalı, çünkü burada diyorum ki, hey, bazılarını tanımlamanızı istiyorum ve
fonksiyonla ne yapacağız?
Buranın içinde başka bir fonksiyon tanımlayacağım, ancak bu geri dönüş ifadesi aslında doğru
çalışmıyor.
Çünkü tek yaptığımız bu bloğun, bu kod bloğunun içinde.
Bu kısım mı?
Fonksiyonu tanımlıyoruz, ancak asla başka bir fonksiyonu çağırmıyoruz.
Yani bu hiçbir şey döndürmez.
Ve bu fonksiyonu çağırma yeteneğimizi kaybettik.
Peki bunu nasıl çözebiliriz?
Tek yol geri dönmek, değil mi?
Sonunda, girintinin doğru olduğundan emin olmalıyız ve başka bir func döndüreceğiz.
Geri dönüşü ekleyelim ve burada ne olacağını görelim.
Çalıştır'a tıklarsam.
Pekala, bu işlevi şimdi anlıyorum.
Yani Total, döndürdüğümüz bu işleve eşit olacak ve bellekte yer alacak.
Tamam.
Ama istediğim sonucu alamıyorum.
Doğru.
Neden peki?
Çünkü.
Bu fonksiyonu çağırmıyoruz.
Bunu yapabilmemiz için birkaç yol var.
Burada parametreleri ya da argümanları verebiliriz.
Diyelim ki 1020 ve eğer Çalıştır'a tıklarsam.
30 alıyorum ya da verdiğimiz her şeyi burada tutmak istiyorsak, sadece başka bir func diyebilirim.
Yani bir ve iki numarayı verirsek ve çalıştır'a tıklarsam.
Hey, şuna bak.
Ben 30 alıyorum.
Şimdi bu videoyu tekrar tekrar izlemeniz gerekebilir çünkü zihninizi biraz zorluyor.
Dürüst olmak gerekirse, bu işlev pek iyi değil çünkü çok kafa karıştırıcı.
İşlevinizin anlaşılması kolay olmalıdır.
Bu yüzden bunu biraz değiştirmek isteyebiliriz, belki de burada aynı parametre adlarına sahip olmak yerine.
Sadece açıklığa kavuşturmak için.
Belki bir ve iki diyebiliriz.
Ve sonra burada, geri döndüğümüzde, bu diğer işlevin, burada çağırdığımız bir ve iki numaralı parametreleri kullandığımı
açıklığa kavuşturmak için ve bir artı ve iki yapıyoruz.
Çünkü bu fonksiyon tanımı, bu şeylerin ne olduğunu gerçekten umursamıyor.
Sadece başka bir fonksiyon çağrıldığında önemser.
Şimdi, videoyu duraklatıp buna bakmanız ve belki biraz pratik yapmanız gerekiyorsa, bu tamamen anlaşılabilir
bir durumdur.
Ama size geri dönüşün gücünü göstermek istedim.
Tıpkı koşullu fonksiyonlarda olduğu gibi iç içe fonksiyonlara sahip olabilirsiniz, ancak fonksiyonunuzun bir
şey döndürmesine dikkat etmelisiniz, aksi takdirde hiçbir şey döndürmeyecektir.
Ve çoğu zaman bir fonksiyondan bir şey döndürmek isteyeceksiniz, böylece programlarımızda daha
sonra kullanabilmek için onu bir değişkene atadığımız bunun gibi bir şey yapabiliriz.
Bir sonrakinde görüşürüz.
Güle güle.
Son bir şey daha.
Bir return anahtar sözcüğü otomatik olarak işlevden çıkar, böylece buraya print gibi başka bir kod parçası eklersem.
Merhaba.
Ya da belki burada beş kişi bile dönebilir.
Hala geçerli olduğunu görüyorsunuz.
Ama bunu çalıştırırsam.
Hala 30 alıyorum çünkü yorumlayıcı beşinci ve altıncı satıra asla ulaşamıyor, çünkü bir fonksiyondan
bir şey döndürdüğümüz anda o fonksiyondan çıkıyor.
Bu kısmın fonksiyondan çıkmamasının nedeni, bu fonksiyonun içinde tanımlama yapıyor
olmamızdır.
Yani aslında bu kısmı çalıştırmıyoruz.
Sadece diyoruz ki, hey, kodumuzda başka bir fonksiyonun geldiğini gördüğümüzde, bunun ne olduğunu biliyoruz,
ancak onu çalıştırmayacağız.
Yani şöyle görünecek.
Ve return ifadesini görür görmez, çağrıldığında, "Pekala, bu
fonksiyondan bu değerle çıkıyorum" diyecektir.
Sadece küçük bir uyarı.