iter python lesson

До загрузки: 30 сек.



Благодарим, что скачиваете у нас :)

Если, что - то:

  • Поделится ссылкой:
  • Документ найден в свободном доступе.
  • Загрузка документа - бесплатна.
  • Если нарушены ваши права, свяжитесь с нами.
Формат: pdf
Найдено: 27.09.2020
Добавлено: 30.09.2020
Размер: 0.06 Мб

И те р ато р
Что б ы о б ъ ект м ож но б ы ло п рои те р и рова ть (п рой ти сь ц икл и че ск и ), у н его д ол ж ен б ы ть м ето д
iter()
, к о то р ы й
во зв р ащ ае т н ам и те р ато р , а д ля т о го ч то б ы о б ъ ект я вл ял ся и те р ато р ом , у н его д ол ж ен б ы ть м ето д
next()
, к о то р ы й
во зв р ащ ае т к а ко й л и бо о б ъ ект.
Рассм отр им п р им ер 1
In [2]:
from
random
import
random
class
RandomIterator
:


def
__init__
( self
, k ):

self
. k = k

self
. i = 0


def
__next__
( self
):

if
self
. i < self
. k :

self
. i +=
1

return
random
()

else
:

raise
StopIteration
Класс с в е р ху о п исы ва е т и те р ато р , к о то р ы й в о зв р ащ ае т н ам н еко е к о л и че ст в о k р ан д ом ны х э л ем ен то в, д ава й те
поп роб уе м
In [3]:
x = RandomIterator
( 3 )
next
( x )
In [4]:
next
( x )
In [5]:
next
( x )
In [6]:
next
( x )
Мы п ер ед ал и в и те р ато р ч и сл о 3 , о б еъ кт в ы дал н ам 3 р ан д ом ны х ч и сл а, п осл е ч е го в ы зв а л и ск л ю че н ие
StopIteration
,
то е ст ь и те р ац ия д ал ьш е н е м ож ет п рои сх о д ить
Out[3]:
0.974779057721419
Out[4]:
0.5878307214369151
Out[5]:
0.09939807037080972
---------------------------------------------------------------------------
StopIteration
Traceback (most recent call last)

in

----> 1
next
( x )

in
__next__
(self)
12

return
random
( )
13

else
:
---> 14

raise
StopIteration
StopIteration
:

In [11]:
x2
= RandomIterator
( 10
)
while
True
:

try
:

print
( next
( x2
))

except
StopIteration
:

break
В д ан ном с л уча е м ы о б р аб ота л и и ск л ю че н ие и в ы ве л и в се о б ъ екты н аш ей и те р ац ии.
Дал ее н ам н уж но р ассм отр еть п ри м ер , к о гд а м ы м ож ем и сп ол ьзо ва ть ц икл
for
In [12]:
class
RandomIterator
:


def
__init__
( self
, k ):

self
. k = k

self
. i = 0


def
__next__
( self
):

if
self
. i < self
. k :

self
. i +=
1

return
random
()

else
:

raise
StopIteration


def
__iter__
( self
):

return
self
In [13]:
for
i in
RandomIterator
( 10
):

print
( i )
Мы н ем ного м од иф иц ирова л и н аш к л асс и д об ави ли т у д а м ето д
__iter__
, с п ом ощ ью н его , к а к м ы у ж е г о во р и ли
см ож ем с д ел ать о б ъ ект и те р и рова н ны м и м ож ем п ол ьзо ва ть ся ц икл ом
for
Рассм отр им п р им ер 2
Гд е м ы с о зд ад им и те р ато р , к о то р ы й б уд ет в о зв р ащ ать н ам п ар н ы е з н аче н ия.
0.8296602526078253
0.3241812889265504
0.2468458111409929
0.8188856047010813
0.1842255530687994
0.30005111827093145
0.2762185091669169
0.9049817491198499
0.12858846723148243
0.5708567592489774
0.9599031298226373
0.8938748267286573
0.6837453881652822
0.23693491225680208
0.6500962953558754
0.59393430308001
0.7335656405211963
0.4014872995278489
0.9710439161470291
0.8001127926819332

In [17]:
class
DoubleIterator
:


def
__init__
( self
, lst
):

self
. lst
= lst

self
. i = 0


def
__next__
( self
):

if
self
. i < len
( self
. lst
):

self
. i +=
2

return
self
. lst
[ self
. i - 2 ],
self
. lst
[ self
. i - 1 ]

else
:

raise
StopIteration

class
MyList
( list
):

def
__iter__
( self
):

return
DoubleIterator
( self
)
In [19]:
for
x in
MyList
([
1 , 2 , 3 , 4 ]):

print
( x )

В д ан ном п ри м ер е, м ы с о зд ал и и те р ато р и н асл ед ова л и н аш н овы й к л асс с п иск а , ч то б ы м ы м огл и п рои те р и рова ть с
пом ощ ью н ово го и те р ато р а.
Но, е ст ь о д но н о, е сл и в с п иск е б уд ет н ече тн ое к о л и че ст в о о б ъ екто в, т о н аш а к о н ст р ук ц ия п ор уш ится : )
In [20]:
for
x in
MyList
([
1 , 2 , 3 , 4 , 5 ]):

print
( x )

In [ ]:
(1, 2)
(3, 4)
(1, 2)
(3, 4)
---------------------------------------------------------------------------
IndexError
Traceback (most recent call last)

in

----> 1
for
x
in
MyList
( [ 1 , 2 , 3 , 4 , 5 ] ) :
2
print
( x )
3


in
__next__
(self)
8

if
self
. i
< len
( self
. lst
) :
9
self
. i
+=
2
---> 10

return
self
. lst
[ self
. i
- 2 ] , self
. lst
[ self
. i
- 1 ]
11

else
:
12

raise
StopIteration
IndexError
: list index out of range

Сообщить о нарушении / Abuse

Все документы на сайте взяты из открытых источников, которые размещаются пользователями. Приносим свои глубочайшие извинения, если Ваш документ был опубликован без Вашего на то согласия.