一、生成器
1.1 什么是生成器
generator:一边生成一边计算后面元素的机制,称为生成器,生成器里面保存的是算法,只有需要用到才会计算后面的值
1.2 通过列表生成式创建生成器
我们可以将列表生成式的中括号改成小括号就创建了一个生成器
list = [i for i in range(10)]
print(type(list)) #
gen = (i for i in range(10))
print(type(gen)) #
1.3 通过函数创建生成器
带有yield的函数称为函数生成器
下面通过代码实现一个斐波那契数列(除第1个,第2个数外,其他的数都是前两个数相加) e
在Python编程语言中,生成器(Generator)和迭代器(Iterator)是两种非常重要的概念,它们主要用于处理大量数据或无限序列,以节省内存资源。理解它们的区别和使用方式对于高效编程至关重要。
一、生成器
1.1 什么是生成器
生成器是一种特殊的迭代器,它采用延迟计算(lazy evaluation)的策略,只在需要时计算下一个值。生成器里面保存的是算法,而不是实际的值,这使得生成器在处理大数据集时非常高效,因为它不会一次性生成所有元素。
1.2 通过列表生成式创建生成器
列表生成式通常用于快速创建列表,但如果将中括号换成小括号,就创建了一个生成器。例如:
```python
list = [i for i in range(10)]
gen = (i for i in range(10))
```
1.3 通过函数创建生成器
带有`yield`关键字的函数被称为生成器函数,执行时会返回一个生成器对象。例如,以下代码定义了一个斐波那契数列的生成器:
```python
def fib(max):
a, b = 1, 2
n = 0
print(str(a) + "\n" + str(b))
while n < max:
n = a + b
a = b
b = n
yield n
for i in fib(10):
print(i)
```
1.4 取出生成器中的元素
你可以通过调用`next()`方法或者使用`for`循环来迭代生成器中的元素。
二、迭代器
2.1 可迭代对象
可迭代对象是指那些可以用于`for`循环的对象,例如列表、元组、字典、集合和字符串。此外,生成器也是可迭代对象。你可以使用`isinstance()`检查一个对象是否为可迭代对象。
2.2 迭代器
迭代器是实现了`__next__()`方法的对象,可以通过调用`next()`方法获取下一个值。虽然生成器是迭代器,但列表、元组、字典和字符串等集合数据类型不是迭代器,尽管它们是可迭代对象。要将这些可迭代对象转化为迭代器,可以使用`iter()`函数。
三、生成器和迭代器小结
生成器是延迟计算的迭代器,它们节省内存且效率高,尤其适用于处理无限序列或大数据集。可迭代对象是可以用于`for`循环的任何对象,而迭代器则特指实现了`__next__()`方法的对象。Python中,所有的生成器都是迭代器,但并非所有可迭代对象都是迭代器。可迭代对象可以通过`iter()`函数转换为迭代器。
生成器和迭代器是Python中实现迭代的关键工具,它们提供了优雅地处理序列数据的方式,尤其是处理大型数据集时,可以避免一次性加载全部数据导致的内存问题。熟练掌握这两者的使用,能极大地提高Python编程的效率和灵活性。