迭代器实现的固定数据获取
Posted gj4990
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代器实现的固定数据获取相关的知识,希望对你有一定的参考价值。
有时会遇到这种场景,在数据量特别大的情况下,不能一次性将数据读到内存中,此时迭代器便派上用场。即一次性只读有限的数据量,在下一次函数或者对象调用时,在上一次的index下继续读取下一个有限长度的数据,即可以通过python的yield实现。下面通过两种方式进行实现:可迭代对象的方式和生成器函数的方式。
#可迭代对象
class IterObject:
def __init__(self, numbers, limit):
self.numbers = numbers
self.limit = limit
def __iter__(self):
count, ret = 0, []
for number in self.numbers:
ret.append(number)
count += 1
if count == self.limit:
yield ret
count, ret = 0, []
if ret:
yield ret
#生成器函数
def get_limit_number(numbers, limit):
count, ret = 0, []
for number in numbers:
ret.append(number)
count += 1
if count == limit:
yield ret
count, ret = 0, []
if ret:
yield ret
def main():
#生成器列表
seed_numbers = (i for i in range(23))
limit = 10
for num in get_limit_number(seed_numbers, limit):
print("Generate get value: 0".format(num))
print("*"*60)
#需要重新产出数据,否则直接使用前面的seed_numbers为空。
seed_numbers = (i for i in range(23))
limit = 10
obj = IterObject(seed_numbers, limit)
for num in obj:
print("Iterable get value: 0".format(num))
if __name__ == "__main__":
main()
运行结果如下:
Generate get value: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Generate get value: [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
Generate get value: [20, 21, 22]
************************************************************
Iterable get value: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Iterable get value: [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
Iterable get value: [20, 21, 22]
以上是关于迭代器实现的固定数据获取的主要内容,如果未能解决你的问题,请参考以下文章