# Python 生成器
> 原文: [https://thepythonguru.com/python-generators/](https://thepythonguru.com/python-generators/)
* * *
于 2020 年 1 月 7 日更新
* * *
生成器是用于创建迭代器的函数,因此可以在`for`循环中使用它。
## 创建生成器
* * *
生成器的定义类似于函数,但只有一个区别,我们使用`yield`关键字返回用于`for`循环的每次迭代的值。 让我们看一个示例,其中我们试图克隆 python 的内置`range()`函数。
```py
def my_range(start, stop, step = 1):
if stop <= start:
raise RuntimeError("start must be smaller than stop")
i = start
while i < stop:
yield i
i += step
try:
for k in my_range(10, 50, 3):
print(k)
except RuntimeError as ex:
print(ex)
except:
print("Unknown error occurred")
```
**预期输出**:
```py
10
13
16
19
22
25
28
31
34
37
40
43
46
49
```
```py
def my_range(start, stop, step = 1):
if stop <= start:
raise RuntimeError("start must be smaller than stop")
i = start
while i < stop:
yield i
i += step
try:
for k in my_range(10, 50, 3):
print(k)
except RuntimeError as ex:
print(ex)
except:
print("Unknown error occurred")
```
`my_range()`的工作方式如下:
在`for`循环中,调用`my_range()`函数,它将初始化三个参数(`start`,`stop`和`step`)的值,并检查`stop`是否小于或等于`start`。 `i`被分配了`start`的值。 此时,`i`为`10`,因此`while`条件的值为`True`,而`while`循环开始执行。 在下一个语句`yield`中,将控制转移到`for`循环,并将`i`的当前值分配给变量`k`,在`for`循环打印语句中执行该语句,然后该控件再次传递到函数`my_range()`内的第 7 行 `i`递增。 此过程一直重复进行,直到`i < stop`为止。
* * *
* * *
- 初级 Python
- python 入门
- 安装 Python3
- 运行 python 程序
- 数据类型和变量
- Python 数字
- Python 字符串
- Python 列表
- Python 字典
- Python 元组
- 数据类型转换
- Python 控制语句
- Python 函数
- Python 循环
- Python 数学函数
- Python 生成随机数
- Python 文件处理
- Python 对象和类
- Python 运算符重载
- Python 继承与多态
- Python 异常处理
- Python 模块
- 高级 Python
- Python *args和**kwargs
- Python 生成器
- Python 正则表达式
- 使用 PIP 在 python 中安装包
- Python virtualenv指南
- Python 递归函数
- __name__ == "__main__"是什么?
- Python Lambda 函数
- Python 字符串格式化
- Python 内置函数和方法
- Python abs()函数
- Python bin()函数
- Python id()函数
- Python map()函数
- Python zip()函数
- Python filter()函数
- Python reduce()函数
- Python sorted()函数
- Python enumerate()函数
- Python reversed()函数
- Python range()函数
- Python sum()函数
- Python max()函数
- Python min()函数
- Python eval()函数
- Python len()函数
- Python ord()函数
- Python chr()函数
- Python any()函数
- Python all()函数
- Python globals()函数
- Python locals()函数
- 数据库访问
- 安装 Python MySQLdb
- 连接到数据库
- MySQLdb 获取结果
- 插入行
- 处理错误
- 使用fetchone()和fetchmany()获取记录
- 常见做法
- Python:如何读取和写入文件
- Python:如何读取和写入 CSV 文件
- 用 Python 读写 JSON
- 用 Python 转储对象