Kedjning och Sammansättning av Iteratorer
Svep för att visa menyn
Att kedja och komponera iteratorer gör det möjligt att bygga kraftfulla datapipelines i Python. Genom att länka samman enkla iterator- eller generatorfunktioner kan du bearbeta data steg för steg, där varje steg transformerar eller filtrerar datan innan den skickas vidare till nästa. Detta tillvägagångssätt är särskilt användbart när du vill tillämpa flera operationer i följd, till exempel filtrera objekt och sedan transformera dem, eller kombinera data från flera källor. Videon ovan visar hur du kan använda generatorpipelines för att hålla din kod modulär och minneseffektiv, utan att behöva skapa mellanliggande listor.
För att se detta i praktiken, tänk dig ett scenario där du har en sekvens av tal och vill filtrera bort de jämna talen, och sedan kvadrera de återstående. Du kan uppnå detta genom att kedja två generatorfunktioner: en för filtrering och en för transformering. Detta tillvägagångssätt säkerställer att varje objekt bearbetas endast vid behov, vilket gör din kod både koncis och effektiv.
12345678910111213141516171819def filter_odds(numbers): for n in numbers: if n % 2 != 0: yield n def square_numbers(numbers): for n in numbers: yield n ** 2 # Original data data = range(10) # Chain the generators: first filter, then transform filtered = filter_odds(data) squared = square_numbers(filtered) # Collect results result = list(squared) print(result) # Output: [1, 9, 25, 49, 81]
Den första funktionen, filter_odds, tar en iterable med tal och returnerar endast de som är udda. Den andra funktionen, square_numbers, tar en iterable och returnerar kvadraten av varje tal. Genom att skicka utdata från filter_odds direkt till square_numbers skapar du en pipeline: först filtrering, sedan transformering av datan. Slutresultatet samlas i en lista och skrivs ut, vilket visar kvadraterna av alla udda tal från 0 till 9.
Denna metod är minneseffektiv eftersom varje värde bearbetas ett i taget, istället för att skapa mellanliggande listor. Det gör också koden modulär, eftersom varje generatorfunktion gör en sak och kan återanvändas i olika pipelines.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal