مشخصات مقاله
-
630
-
0.0
-
2524
-
0
-
0
آموزش Iterators در برنامه نویسی پایتون
آموزش تکرار شونده ها (iterators) در زبان Python
احتمالا تا اینجا متوجه شده اید که روی بیشتر اشیای container با استفاده از عبارت for می توان حلقه زد.
for element in [1, 2, 3]:
print(element)
for element in (1, 2, 3):
print(element)
for key in {'one':1, 'two':2}:
print(key)
for char in "123":
print(char)
for line in open("myfile.txt"):
print(line, end='')
این نوع دسترسی، تمیز، دقیق و آسان است. استفاده از تکرار شونده ها، پایتون را فراگیر و متحد کرده است. در پشت صحنه، عبارت for ، iter() را روی شی container صدا می زند. تابع، یک شی تکرار شونده را باز می گرداند که متد __next__() را تعریف می کند، که به عناصر درون container یکی یکی دسترسی می یابد.
زمانی که هیچ عنصری باقی نمانده باشد، __next__() استثنای StopIteration را اعلام می کند که به حلقه for دستور خاتمه می دهد. می توانید با استفاده از تابع داخلی next() ، متد __next__() را فراخوانی کنید. مثال زیر نحوه عملکرد آن را نشان می دهد.
>>> s = 'abc'
>>> it = iter(s)
>>> it
>>> next(it)
'a'
>>> next(it)
'b'
>>> next(it)
'c'
>>> next(it)
Traceback (most recent call last):
File "", line 1, in
next(it)
StopIteration
با دیدن مکانیزم پشت پروتکل تکرار شونده، اکنون افزودن رفتار تکرار شونده به کلاس هایتان آسان است. متد __iter__() را تعریف کنید که با متد __next__() یک شی را باز می گرداند. اگر کلاس، __next__() را تعریف می کند، پس __iter__() می تواند فقط self را باز گرداند.
class Reverse:
"""Iterator for looping over a sequence backwards."""
def __init__(self, data):
self.data = data
self.index = len(data)
def __iter__(self):
return self
def __next__(self):
if self.index == 0:
raise StopIteration
self.index = self.index - 1
return self.data[self.index]
(یک کد دیگر)
>>> rev = Reverse('spam')
>>> iter(rev)
<__main__.Reverse object at 0x00A1DB50>
>>> for char in rev:
... print(char)
...
m
a
p
s