python生成器与迭代器

147 阅读2分钟

列表生成式

Python的列表生成式,可以很大程度上提高代码的效率,从一定程度上缩减代码量。使用起来也比较方便,具体使用如下:

#单个循环的列表生成式
a = [i*2 for i in range(100)] #range采用的是算法,没有一次性生成数据序列

#双循环的列表生成式
b = [i+j for i in range(10) for j in range(20)]

#循环+判断的列表生成式
c = [i for i in range(100) if i%2==0]
d = [i if i%2==0 else 0 for i in range(100)]
e = [9 if i < 10 else 45  if i < 50 else 100 for i in range(100)]

通过测试可以发现,这种产生列表的方式要比普通的循环效率高。

生成器

为了节省内存的开销,设计了一种数据结构,只保存生产数据的算法,不存储实际的数据,需要使用数据时, 根据算法边循环边生成数据,这种生成数据的方式就是生成器。

#使用生成器的方式1 --method1
g = (i for i in range(100))

#使用生成器的方式2 --method2
def test():
    for i in range(100):
        yield i #暂停

g = test()
next(g)/g.__next__()/ 使用next方法获取下一个数据

使用生成器来实现高并发,具体如下:

#动态给函数传参
def test():
	while True:
		n = yield   #接收输入
		print("收到参数:",n)
g = test()
g.__next__() #第一次传入None
for i in range(5):
	g.send(i)


#并发
g1 = test()
g2 = test()
g3 = test()
g1.__next__()
g2.__next__()
g3.__next__()
for i in range(100)
	g1.send(i)
	g2.send(i+1)
	g2.send(i+2)

迭代器

可循环、遍历的对象,为可迭代对象

from collections import Iterable
isinstance([],Iterable)

可通过next()持续获取下一个值的对象,为迭代器 在其类中实现了__iter__ & __next__两个方法 (生成器就是迭代器的一种)

from collections import Iterator
isinstance({},Iterator)
isinstance(iter([]),Iterator)

    上一篇:python的内置函数 下一篇:python模块