迭代器与生成器区别
迭代器
可迭代对象与迭代器
-
可迭代对象
可以直接作用于循环语句(如for语句)的对象 -
迭代器
可以被内置函数next()调用,并不断返回下一个值得对象
注意:
可迭代对象不一定是迭代器
将可迭代对象转换为迭代器——内置函数iter()
my_list = [1, 2, 3, 4, 5]
# next(my_list) # TypeError: 'list' object is not an iterator
myIterator = iter(my_list)
print(next(myIterator))
print(next(myIterator))
输出:
1
2
生成器
生成器指生成一个新的迭代器的函数
注意:
- 不用return语句,而用yield语句
- “惰性计算”——在调用生成器时,不会立即执行它,而是推迟至需要调用其中的每个元素时才运行
def myGen():
x = range(0, 3)
for i in x:
print("yield 之前")
yield i + 2
print("yield 之后")
if __name__ == '__main__':
for x in myGen():
print("输出之 前")
print(x, end=" , ")
print("输出之 后")
输出:
yield 之前
输出之 前
2 , 输出之 后
yield 之后
yield 之前
输出之 前
3 , 输出之 后
yield 之后
yield 之前
输出之 前
4 , 输出之 后
yield 之后
参考:
[1]Python编程:从数据分析到数据科学/朝乐门著.—北京:电子工业出版社,2019.1

浙公网安备 33010602011771号