c语言编程笔录

首页 >   > 笔记大全

笔记大全

Python中迭代器与生成器如何使用

更新时间:2023-10-04

关于迭代器的介绍

迭代器是Python中一个非常重要且方便的概念。迭代器可以用来遍历一系列的对象,如元组、列表、字典等。

nums=[1,2,3,4]
i_nums=iter(nums)
print(next(i_nums))
print(next(i_nums))

在上面的例子中,我们定义了一个列表 `nums`,并通过将它传给 `iter()` 函数创建了一个新的迭代器对象 `i_nums` 。随后,我们使用内置函数 `next()` 来逐个访问列表中的元素。

如何创建生成器

在Python中,我们可以使用生成器函数来创建生成器。生成器函数顾名思义是指生成器的创建函数,它们是在运行时生成值的一种可迭代对象。

def square_nums(nums):
    for i in nums:
        yield(i*i)
        
my_nums=square_nums([1,2,3,4])
print(next(my_nums))

在上面这个例子中 `square_nums()` 函数返回一个迭代器对象 `my_nums` 。当我们每次运行 `next()` 函数时,它都会调用生成器函数中的代码并返回下一个值。

如何使用生成器函数来实现迭代器

事实上,Python中我们可以使用生成器函数来直接实现迭代器,使我们的代码更加简洁。

class MyRange:
    def __init__(self,start,end):
        self.start=start
        self.end=end
        
    def __iter__(self):
        return self.generator_function()
    
    def generator_function(self):
        for i in range(self.start,self.end+1):
            yield(i)
            
nums=MyRange(1,5)
for num in nums:
    print(num)

在这个例子中,我们创建了一个名为 `MyRange` 的迭代器对象。我们实现了一个生成器函数 `generator_function()` 来生成每个元素。

如何使用生成器来处理大型数据集

使用生成器的另一个优点是可以用于处理大型数据集。常规的实现方法会在内存中存储整个数据集,并对其进行操作。这种方式的问题是,如果我们的数据集太大,内存将无法容纳所有数据。

import csv

def read_csv_file(filepath):
    with open(filepath,"r") as csvfile:
        reader=csv.DictReader(csvfile)
        for row in reader:
            yield row
            
csv_data=read_csv_file("data.csv")
for row in csv_data:
    print(row["name"])

在这个例子中,我们使用生成器来逐行读取 `data.csv` 文件。由于我们将数据逐行读取并处理,因此不需要在内存中存储完整的CSV文件。这种方式不仅可以处理大型数据集,而且可以大大减少内存使用。