Heim >Backend-Entwicklung >Python-Tutorial >Geschrieben für Python-Programmiermeister 2: Iteratoren
In der Spalte „Python-Tutorial“ werden Iteratoren vorgestellt, die bei der Programmierung verwendet werden.
Verwandte kostenlose Lernempfehlungen:
Python-Tutorial(Video)Das Iteratormuster ist ein klassisches Software-Designmuster, das mittlerweile in viele Programmiersprachen integriert ist. Dieses Design Muster. Unter den primitiven Datentypen von Python sind diejenigen, die für Schleifen verwendet werden können, iterierbare Typen. Natürlich können Sie auch die Funktion iter verwenden, um den entsprechenden Iterator abzurufen und dann das Objekt zu durchlaufen. Zum Beispiel der folgende Code:So implementieren Sie iterierbare Objekte und Iteratorobjekte
l = [1, 3] # 可迭代对象 __iter__t = iter(l) #获取迭代器对象print(t.__next__()) print(t.__next__())# print(t.__next__()) # 报异常复制代码
from random import samplefrom collections import Iterable, Iteratorclass WeatherIterator(Iterator): def __init__(self, cities): self.cities = cities self.index = 0 def getWeather(self, city): return (city, sample(['sun','wind','yu'], 1)[0]) def __next__(self): if self.index == len(self.cities): raise StopIteration city = self.cities[self.index] self.index += 1 return self.getWeather(city)复制代码Um ein iterierbares Objekt zu implementieren, müssen Sie nur die __iter__-Methode implementieren. Ebenso definiert die Iterable-Klasse im Collections-Paket auch die __iter__-Methode als abstrakte Klasse.
from collections import Iterableclass WeatherIterable(Iterable): def __init__(self, cities): self.cities = cities self.index = 0 def __iter__(self): return WeatherIterator(self.cities)复制代码Auf diese Weise können Sie eine for-Schleife zum Iterieren verwenden.
for weather in WeatherIterable(['北京', '上海', '广州']): print(weather)复制代码Einführung in GeneratorenSchauen Sie sich zunächst den folgenden Code an:
def gen(): print("step 1") yield 1 print("step 2") yield 2 print("step 3") yield 3复制代码
g = gen() g.__next__() print(g.__next__()) print(g.__next__())复制代码Wie im obigen Code gezeigt, führt der Generator bei jedem Aufruf der __next__-Methode eine gen-Funktion aus, bis er auf das Schlüsselwort yield trifft, und gibt das Folgende zurück. Daher kann ein Generator als eine Funktion verstanden werden, die unterbrochen werden kann. Hinweis: Generatorobjekte sind auch iterierbare Objekte.
for x in g: print(x)复制代码So verwenden Sie eine Generatorfunktion, um ein iterierbares Objekt zu implementierenDurch die Implementierung der __iter__-Methode als Generatorfunktion können Sie ein iterierbares Objekt implementieren.
class PrimeNumbers: def __init__(self, start, end): self.start = start self.end = end def isPrimeNum(self, k): #判断是否是素数 if k < 2: return False for i in range(2, k): if k % i == 0: return False return True def __iter__(self): for k in range(self.start, self.end + 1): if self.isPrimeNum(k): yield kfor num in PrimeNumbers(2, 100): print(num)复制代码
l = [1, 2, 3, 4, 5]for x in reversed(l): print(x)复制代码
class FloatRange: def __init__(self, start, end, step=0.1): self.start = start self.end = end self.step = step def __iter__(self): t = self.start while t <= self.end: yield t t += self.step def __reversed__(self): t = self.end while t >= self.start: yield t t -= self.stepfor x in FloatRange(1.0, 4.0, 0.5): print(x)for x in reversed(FloatRange(1.0, 4.0, 0.5)): print(x)复制代码So führen Sie Slicing-Vorgänge für Iteratoren aus Die islice-Funktion im itertools-Paket kann Slicing-Vorgänge für iterierbare Objekte ausführen.
from itertools import islicefor x in islice(FloatRange(1.0, 4.0, 0.5), 2, 5): print(x)复制代码
for w, e, m in zip([1, 2, 3, 4], ('a', 'b', 'c','d'), [5, 6, 7, 8]): print(w, e, m)复制代码
from itertools import chainfor x in chain([1, 2, 3, 4], ('a', 'b', 'c','d')): print(x)复制代码
Das obige ist der detaillierte Inhalt vonGeschrieben für Python-Programmiermeister 2: Iteratoren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!