Python üreteci

Python işlevleri ve meth

Yineleyiciler Python'da önemli bir rol oynar. Yinelenebilecek bir nesne oluşturmanıza izin verirler. Bir for in döngüsü aracılığıyla erişilebilen verileri depolamak için iyi bir yoldur.

Yineleyicilerle ilgili sorun, bir tane oluşturmak için çok fazla çalışma gerektirmesidir. Yararlıdırlar, ancak bir tanesinin çalışması için çok fazla kod yazmanız gerekir. Üreteçler bu sorunun çözülmesine yardımcı olur.

Bu kılavuzda, Python üreteçlerinin ne olduğu ve bunları neden kullanmanız gerektiği hakkında konuşacağız. Nasıl çalıştıklarını anlamanıza yardımcı olmak için Python'da bir oluşturucu da uygulayacağız.

Daha fazla uzatmadan başlayalım!




Jeneratör nedir?

Oluşturucu, Python'da yineleyici oluşturmanın basit bir yoludur. Üzerinde yineleme yapabileceğiniz bir nesne döndüren bir işlevdir.

Üreticilere genellikle sözdizimsel şeker denir. Bunun nedeni, Python'a mutlaka yeni işlevler eklememeleridir. Kodunuzu daha verimli hale getirmeye yardımcı olurlar.

Yineleyiciler gibi, bir oluşturucu üzerinde yalnızca bir kez yineleme yapabilirsiniz. Bunun nedeni, oluşturucuların kaç kez yinelendiklerini takip etmeleri ve sıfırlanamamasıdır.

Bir Python yineleyicisine bir göz atalım:

< p>Katılımcıların %81'i, bir eğitim kampına katıldıktan sonra teknik iş beklentileri konusunda daha emin hissettiklerini belirtti. Bugün bir eğitim kampı ile eşleştirin.

Ortalama bir eğitim kampı mezunu, bir eğitim kampına başlamaktan ilk işini bulmaya kadar, kariyer geçişinde altı aydan daha az zaman harcadı.

Bu kod, adında bir yineleyici oluşturur. Kurabiye. Verileri bu yineleyiciden geçirdiğinizde yinelenebilir bir nesneye dönüştürülecektir. Bu, bir for in döngüsü kullanarak veriler arasında döngü yapabileceğiniz anlamına gelir. Bu koda bakıyor ve gerçekten uzun olduğunu düşünüyorsanız, çünkü öyle.

Üreticiler bu kodu kısaltmamıza yardımcı olabilir. Yukarıdaki yineleyicimiz için bir jeneratör yazalım:

def cookie(value): while True : verim değeri

Kodumuzun boyutu önemli ölçüde küçültüldü. Bunun nasıl çalıştığını tartışalım.

Oluşturucu, dönüş ifadesi yerine getiri anahtar kelimesine sahip bir işlevdir. Getiri ifadeleri bir işlevden bir değer döndürür.

Bir getiri ifadesi ile bir geri dönüş ifadesi arasındaki fark, bir geri dönüş ifadesinin bir işlevin çalışmasını durdurması, verim ifadesinin ise işlevi duraklatıp devam etmesidir. yineleniyor.


Basit oluşturucu işlevimizi yinelemeye çalışalım:

cookies için ("Raspberry"): print(cookie) 

Kodumuz şunu döndürür:

Ahududu

< p>Raspberry


Bu kod, biz programı durdurana kadar tekrar etmeye devam eder. Bunun nedeni, çalıştırılan bir while döngüsü kullanmamızdır. Bu çoğu durumda pek kullanışlı değildir. Bir eylem gerçekleştirildiğinde duran bir üreteç yazalım.




Python Oluşturucu Nasıl Yazılır

Bir konsola yazdırmak istediğimiz çerezlerin listesi. Bu liste şuna benzer:

[“Raspberry”, “Choc-Chip”, “Cinnamon”, &ldquo ;Yulaf”]

Bunları konsola yazdırmak için, basit bir jeneratör yedim. Yeni bir Python dosyası açın ve aşağıdaki kodu yapıştırın:

def print_cookies(cookies): uzunluk = len(cookies) for range(0, length): verim çerezleri[cookie] 

Oluşturucumuz, belirlediğimiz listedeki her çerezi inceler ve her bir çerezi ayrı ayrı döndürür. Bu jeneratör henüz çalışmıyor. Üzerinde yineleme yapmak için bir for döngüsü kullanmalıyız:

cookie_list = ["Raspberry", print_cookies(cookie_list) içindeki c için "Choc-Chip", "Cinnamon", "Oat"]: print(c) 

cookie_list, dört çerezin bir listesini saklar. Ardından, cookie_list içindeki değerler arasında yineleme yapmak için oluşturucumuzu kullanan bir for döngüsü kurduk.

For döngümüzdeki her yineleme için, oluşturulan nesne yazdırılır. konsola:

Ahududu

"Python.Engineering hayatıma en ihtiyacım olduğu anda girdi ve hızlı bir şekilde bir bootcamp ile eşleşmeme yardımcı oldu. Mezun olduktan iki ay sonra, hayattaki değerlerim ve hedeflerim ile uyumlu rüya işim!"

Venus, Rockbot'ta Yazılım Mühendisi

Choc-Chip

Tarçın

Yulaf

Başardık! Bu oluşturucu, cookie_list değişkenindeki her değer yinelenene kadar değerleri döndürür.

Üreticilerin bir dizi kullanım durumu vardır. Diyelim ki, toplamak istediğimiz bir sipariş fiyatları listemiz var. Bunu aşağıdaki kodu kullanarak yapabiliriz:

def total_orders(orders): uzunluk = len( siparişler) toplam = 0 için aralık (0, uzunluk): toplam += siparişler[o] toplam getiri

Bu oluşturucu, bir liste. Her bir öğe tekrarlandıktan sonra, üretici siparişlerin mevcut toplam değerini verecektir. Jeneratörümüzü kullanan bir for döngüsü yazalım:

order_list = [2.30, 2.50, 1.95, 6.00, 7.50, 2.15] total_orders(order_list) içindeki sipariş için: print(order) 

Kodumuz şunu döndürür:


2.3

4.8

6.75

12.75

20.25

22.4

Oluşturucumuz order_list değişkenindeki tüm siparişlerin kümülatif değerini hesapladı. Listedeki her yineleme yeni kümülatif değeri döndürür.




Nasıl yapılır? Bir Jeneratör İfadesi Yazın

Jeneratörleri yazmak bir yineleyiciden zaten daha kolay. Jeneratör ifadeleri sayesinde daha temiz kod yazma arayışımızın durmasına gerek yok.

Jeneratör ifadeleri liste anlamalarına benzerler. Jeneratör ifadeleri, bir jeneratör gibi her seferinde bir öğe üretir. Bu, tüm bir liste üreten bir liste kavrayışından farklıdır. hepsi aynı anda.

Çerezlerimiz için bir jeneratör yazalım örneğimiz:

cookie_list = ["Ahududu", "Çikolata", "Tarçın", "Yulaf"] cookie_generator = (cookies_list'te çerez için çerez) 

Biz cookie_list değişkeninde bir çerez listesi tanımladı. Daha sonra bir jeneratör ifadesi yaratırız. Bu ifade, liste kavramaları için sözdizimini kullanır, ancak büyük bir farkla: liste kavramaları köşeli parantezler içinde tanımlanırken, oluşturucular yuvarlak parantezler içinde tanımlanır.

Yinelenen bir for döngüsü oluşturalım. ifade:

cookies_generator içindeki çerez için: print(cookie) 

Kodumuz şunu döndürür:

Ahududu

Çikolatalı cips

Tarçın

Yulaf

Bu oluşturucunun yanıtı, ilk örneğimizdekiyle aynıdır. Sözdizimimiz önemli ölçüde daha açıktır.

Bir oluşturucu ifadesi kullanılarak bildirilen bir oluşturucu üzerinde yineleme yaptığınızda, onu bir işlev olarak çağırmadığınızı unutmamak önemlidir. cookie_generator oluşturucumuz hiçbir giriş değerini kabul etmez: cookie_list listesi üzerinde yinelemesi gereken kodu zaten içerir.

Yapmanız gereken üreteç ifadeleri sözdizimini yalnızca basit bir işlev gerçekleştiren bir üreteç yazmanız gerektiğinde kullanın. Bir değerler listesi yazdırmak buna iyi bir örnektir; Bir listedeki değerleri belirli bir sayı ile çarpmak da başka bir iyi örnektir.

Bunun nedeni, oluşturucu ifade sözdiziminin açık olmasına rağmen, esas olarak tek satırlı ifadeler için tasarlanmış olmasıdır. Oluşturucunuz birden fazla kod satırı kullanacaksa, bunu bu makalede daha önce tartıştığımız sözdizimini kullanarak bir oluşturucu işlevi olarak yazın.





Jeneratörler Neden Kullanılır?

Jeneratörlerin kullanılmasının başlıca nedeni, yineleyicilerden daha kısa olmalarıdır.

Jeneratörler bir fonksiyon gibidir ve çalışmak için herhangi bir __init__, __iter__ veya __next__ ifadesine ihtiyaç duymaz.Bu, bu üç ifadenin tümünü gerektiren bir yineleyiciden farklıdır.Bu davranış, bir oluşturucuyu yazarken yapabileceğinizden çok daha az kod satırında uygulayabileceğiniz anlamına gelir. iterator.

Üstelik, üreteçler belleği kullanmada verimlidir. Üreteçler bir seferde yalnızca bir öğe üretir. Bir sonucu döndürmeden önce bellekte tam bir dizi oluşturmazlar. Bu, geniş bir veri listesi üzerinde yineleme yapmanız gerekiyorsa, oluşturucular çok pratiktir.

Bunun çalışma şekli, yineleyicilerin tembel bir değerlendirme yöntemi kullanmasıdır.Yalnızca yinelenebilir bir nesnenin sonraki öğesini oluştururlar. ct bu öğe istendiğinde.




Sonuç (ve Meydan Okuma)

Jeneratörler daha Pythonic bir yineleyici oluşturmanıza olanak tanır.

Jeneratörler bunu kolaylaştırır __init__, __iter__ veya __next__ ifadeleri yazmak zorunda kalmadan yineleyici protokolünü kullanarak nesneleri yazmak. Jeneratörler fonksiyonlar olarak tanımlanır. Bir oluşturucuyu durdurmak ve normal işlemlerine geri dönmeden önce ana programa bir değer iletmek için verim ifadesini kullanırlar.

Bir meydan okuma arıyorsanız, işte birkaç fikir:

  • Bir dizeyi tersine çeviren bir oluşturucu yazın.
  • Bir değerler listesinden yalnızca belirli bir kelimeyi içeren değerleri döndüren bir oluşturucu yazın.
  • Listedeki her sayıyı ikiyle çarpan bir oluşturucu yazın.

Daha fazla okumak için nasıl yapılacağı konusundaki eğiticimize bakın. Python yineleyicileri yazın ve kullanın. Artık bir uzman gibi Python'da oluşturucularla çalışmaya başlamaya hazırsınız!





Python üreteci: StackOverflow Questions