生成器-generator、迭代器-Iterator

2020-11-20  本文已影响0人  小飞船1号

生成器(generator)

定义
要创建一个generator
1 只要把一个列表生成式的[]改成(),就创建了一个generator
g = (x * x for x in range(4))
print(g)
#<generator object <genexpr> at 0x0000014E15F44E60>
print(next(g))
#0
print(next(g))
#1
#接着上边执行
for n in g:
    print(n)
#4
#9
for n in (x * x for x in range(2)):
    print(n)
#0
#1
2 函数定义中包含yield关键字那么这个函数就不再是一个普通函数,而是一个generator:

普通函数和generator函数不同之处

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))
for p in odd():
    print(p)
'''
step 1
1
step 1
1
step 2
3
step 3
5
'''
#-------------------------------------------------------------------------------------------------------------------------------
def start_requests():
    for p in range(1,5):
        url = f"https://seekingalpha.com/latest-articles?page={p}"
        yield {"url": url}   


g=start_requests()
print(next(g))
print(next(g))
print(next(g))
for p in start_requests():
    print(p)

'''
{'url': 'https://seekingalpha.com/latest-articles?page=1'}
{'url': 'https://seekingalpha.com/latest-articles?page=2'}
{'url': 'https://seekingalpha.com/latest-articles?page=3'}
{'url': 'https://seekingalpha.com/latest-articles?page=1'}
{'url': 'https://seekingalpha.com/latest-articles?page=2'}
{'url': 'https://seekingalpha.com/latest-articles?page=3'}
{'url': 'https://seekingalpha.com/latest-articles?page=4'}
'''

迭代器(Iterator)

可以直接作用于for循环的数据类型有以下几种:

定义
from collections.abc import Iterator

a=isinstance((x for x in range(10)), Iterator)
print(a)
#True
b=isinstance(iter('abc'), Iterator)
print(b)
#True
上一篇 下一篇

猜你喜欢

热点阅读