Loading

迭代器与生成器区别


返回 我的技术栈(Technology Stack)



迭代器

可迭代对象与迭代器

  • 可迭代对象
    可以直接作用于循环语句(如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


posted @ 2021-08-05 18:34  言非  阅读(215)  评论(0)    收藏  举报