1:迭代器
li = [5,6,7]
it=iter(li)
print(it)
print(it.__next__())
print(it.__next__())
print(it.__next__())
执行结果:
迭代的另一种使用方法:
#encoding=utf-8
li=[5,6,7]
it=iter(li)
print(it)
print(next(it))
print(next(it))
print(next(it))
print(next(it))
输出结果:
迭代习题:输出是0,10,20
#encoding=utf-8
class MyRange():
def __init__(self,n):
self.idx = 0
self.n = n
def __iter__(self):
return self
def __next__(self):
if self.idx <self.n:
val = self.idx
self.idx += 10
return val
else:
raise StopIteration()
myRange = MyRange(30)
print(next(myRange))
print(next(myRange))
print(next(myRange))
输出结果:
__iter__()和__next()__方法
这两个方法是迭代器最基本的方法
一个用来获取迭代对象
一个用来获取容器中的下一个元素
2:生成器
在python中一边循环一边计算的机制,称为生成器
示例:
>>> L=[x*x for x in range(10)]
>>> print(L)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g=(x*x for x in range(10))
>>> print(g)
<generator object <genexpr> at 0x0000000002D6F0D8>
>>> print(g)
<generator object <genexpr> at 0x0000000002D6F0D8>
>>> print(next(g))
0
>>> print(next(g))
1
>>> print(next(g))
4
>>> print(next(g))
9
>>> print(next(g))
16
>>> for n in g:
... print(n)
...
25
36
49
64
81
>>>
示例2
def odd():
print('step 1')
yield 1
print('step 2')
yield 3
print('step 3')
yield 5
o =odd()
print(next(o))
print(next(o))
print(next(o))
print(next(o))
输出结果:
3:枚举
>>> for i ,value in enumerate(['A','B','C']):
... print(i,value)
...
0 A
1 B
2 C