yield简单使用
def func(num):
for i in range(num):
yield i
# 返回一个生成器对象
x = func(3)
print(type(x))
<class 'generator'>
1.next()调用
print(next(x))
print(next(x))
print(next(x))
print(next(x))# 报错
0
1
2
Traceback (most recent call last): ...... print(next(x)) StopIteration
- for循环调用
生成器是可迭代对象,可以用循环调用。(但是可迭代的并不一定是生成器对象,这是两个不同的概念)
for i in x:
print(i)
0
1
2
yield from
def mfunc(iterable):
yield from iterable
# 返回一个生成器对象m
m = mfunc('123')
print(next(m))
print(next(m))
print(next(m))
1
2
3
内置内建模块itertools中的一些函数
Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数。
- itertools.count()
返回一个count对象,是一个无限的迭代器。
相当于:
def count(firstval=0, step=1):
x = firstval
while 1:
yield x
x += step
- itertools.cycle()
返回一个cycle对象,把传入的一个序列无限重复下去
相当于:
def mfunc(iterable):
while True:
yield from iterable