列表生成式
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)