Sonuncusu hakkında konuşalım ve bu biraz gelişmiş ve ilk başta kavraması biraz zor olabilir, ancak var olduğunu
bilmek iyidir ve kendi başınıza pratik yaparak ve bazı belgeleri okuyarak bu konuda
daha fazla bilgi edinebilirsiniz.
Şimdi Reduce, python yerleşik işlevinin bir parçası olarak gelmiyor.
reduce kullanabilmemiz için şöyle bir şey yapmamız gerekiyor.
Şimdi, bunu daha önce hiç görmediniz ve bu, kursun modüller bölümünde ele alacağımız
bir konu.
Ancak esasen burada olan şey, Python yorumlayıcısını ve Python paketini indirdiğimizde, bizim durumumuzda,
bu dalgalanma bunu bizim için zaten yapıyor.
Bu funky araçlarından bir şeyler içe aktarabiliriz ve funk araçları, python kurulumuyla birlikte gelen işlevsel araçlar
için kullanabileceğimiz bir araç kemeri olarak adlandırdığımız şeydir.
Ve oradan da içe aktarabileceğimiz belirli bir işlev var.
Yani diyorum ki, hey, bu araç kemerindeki funk araçlarından, reduce işlevini içe aktarmanızı istiyorum, böylece
kodumuzda tekrar kullanabiliriz, kursta daha sonra ele alacağımız bir şey.
Şimdilik bu satırı kopyalayıp yapıştırın.
Şimdi listemizden bazılarını çıkaralım ve burada reduce kullanalım.
Şimdi küçültmek için birkaç şeye ihtiyacımız olacak.
Birincisi.
Fonksiyona ihtiyacımız var.
Ve sonra diziye ya da veriye ihtiyacımız var.
Peki işlevi ne olacak?
Öncelikle verilerimiz listemiz olacak.
Bu yüzden listemin ve indirgenmiş fonksiyonun ilginç bir şey yapmamıza izin verdiğini söyleyeceğim.
Diyelim ki ona bir işlev verebilirim ve bu işlev onu akümülatör olarak adlandıracaktır.
Ve akümülatör iki parametre alır.
Ve unutmayın, bu reduce tarafından çağrılacak.
Yani Reduce, ona verdiğimiz verilerden, yani benim listemden bu iki parametreyi vermekle
sorumlu olacak.
İlk parametre akümülatör ya da benim durumumda ACC dediğimiz şey olacak.
Ve sonra burada bir madde olacak.
Şimdi gerçekten ilginç olan nokta, listemi indirgemeden ilk kez geçirdiğimizde, ilk öğeyi
alacağız.
İlk öğe bu parametrede olacaktır.
Ancak, başlangıçta bu Assisi nedir?
Buradaki parantezleri kaldırırsam.
Ve size azaltmayı göstereceğim.
Fonksiyona sahip olduğumuzu görüyorsunuz.
Bizim durumumuzda listemiz olacak olan dizi.
Ve sonra başlangıç ve ilk, akümülatörün ne olacağıdır.
Bir kez daha, henüz çağırmayacağımız bir akümülatör fonksiyonuna sahip olacağımızı varsayalım.
Reduce bunu bizim için yapacak.
Listeyi vereceğim.
Ya da üzerinde yinelemek istediğimiz veriler.
Ve sonra ona sıfır başlangıç değeri vereceğim.
Yani üç tane var.
Buradaki parametreler ya da verdiğimiz üç argüman.
Parantezleri kapatayım.
Al bakalım.
Bunu biraz daha büyütelim ve heceleyebildiğimden emin olalım.
Şimdi burada, ilk öğe listemdeki ilk öğe ne ise o olacak.
Ve eğer bir şey vermezsek akümülatör varsayılan olarak sıfır olacaktır.
Ya da bizim durumumuzda, akümülatörün sıfır olacağını söyledik.
Yapacağımız ilk şey, akümülatör artı öğeyi döndürmek olacak.
Tamam.
Şimdi bunları teker teker inceleyelim.
Görebilmemiz için akümülatörü ve öğeyi buraya yazdıracağım.
Ve sonra bu kodu çalıştıracağım.
15. satırdaki nesne yinelenebilir değildir.
Ve bu biraz zor, ama aslında artık listeye ihtiyacımız yok çünkü Reduce bizim için ilginç
bir şey yapacak.
Bu yüzden şimdilik bunu kaldıralım ve reduce bize yazdırmada ne verirse onu döndürelim.
Çalıştır'a tıklarsam.
Şuna bir bak.
Pekala, az önce ne oldu?
Bir göz atalım.
Azalt.
Ona verdiğimiz yinelenebilirden bir şeyi, bir tür değeri azaltmamızı sağlar.
Adım adım gidelim.
Benim listem var ve listem reduce aracılığıyla akümülatöre uygulanacak.
Akümülatör listemi alacak ve ilk geçişte yapacağı ilk şey şu olacak: Hey,
akümülatörüm ne olacak?
Sıfıra ayarlayacağım.
Yani akümülatörden ilk geçiş sıfır olacaktır.
Bir öğe bir olacak, burada gördüğümüz şey bu ve sıfır artı bir ekleyeceğiz.
Şimdi bir tane iade ettik.
Şimdi ikinci yol.
Ne olacak?
Akümülatörden ikinci geçiş, bunun döndürdüğü şey olacak.
Dolayısıyla, bu döndürülen her neyse bir sonraki geçiş akümülatöre doldurulacaktır.
Yani bizim durumumuzda, sıfır artı bir bir olacaktır.
Bir eşya olacak.
Bir artı iki üç eder.
Yani bir artı iki eşittir üç.
Dolayısıyla, bir sonraki seferde akümülatör üç olacak ve burada görebileceğiniz gibi içinden
geçtiğimiz şey de üç olacak.
Ve üç artı üç altı eder.
Tüm bu değerleri topladık ve tek bir altı sayısı döndürdük.
Listemizi, bizim durumumuzda akümülatör kullanarak manipüle ettiğimiz bir tür veriye indirgedik.
Ama burada istediğim her şeyi yapabilirdim.
Örneğin, bunu 10'a eşit değil olarak değiştirirsem, Çalıştır'a tıkladığımda ne olacağını düşünüyorsunuz?
16 alıyorum çünkü ilk akümülatörümü on ile başlattım, yani o zaman on artı birdi, böyle devam
etti.
Şimdi gerçekten çok güçlü bir şekilde azaltıyor çünkü onunla birçok şey yapabiliyorsunuz.
Gerçekten çok esnek.
Ve aslında kaputun altında, harita filtresi gibi işlevler aslında kaputun altındaki bu azaltmayı kullanıyor, böylece aslında azaltma
kullanarak kendi harita ve filtre işlevinizi oluşturabilirsiniz.
Yine, reduce ilk başta anlaşılması biraz zordur ve gerçekten kullanmak için biraz pratik yapmak gerekir,
ancak ileri düzey programcıların gerçekten çok sevdiği ve kariyeriniz boyunca daha iyi ve daha iyi hale
geldikçe daha fazlasını göreceğiniz şeylerden biridir.
Bir sonrakinde görüşürüz.
Güle güle.