Python:迭代器、生成器(yield)、iter函数

# 首先理解迭代器(iterators),迭代器是⼀个让程序员可以遍历的⼀个容
# 器(特别是列表)的对象。然⽽,⼀个迭代器在遍历并读取⼀个容器的数据元素时,并不
# 会执⾏⼀个迭代。这里有三个部分要说明:
# 可迭代对象(Iterable)
# 迭代器(Iterator)
# 迭代(Iteration)
# 可迭代对象(Iterable):⼀个可迭代对象是Python中任意的对象,只要它定义了可以返回⼀个迭代器的__iter__
# ⽅法,或者定义了可以⽀持下标索引的__getitem__⽅法。简单说,⼀个可迭代对象,就是任意的对象,只要它能给我们提供⼀个迭代器。
# 只要它定义了⼀个next(Python2) 或者__next__⽅法。就是⼀个迭代器。
# ⽣成器也是⼀种迭代器,但只能对其迭代⼀次。这是因为他们并没有把所有的值存在
# 内存中,⽽是在运⾏时⽣成值。可使用for循环、传递给任意可进行迭代的函数和结构。
# 大多数时候,生成器是以函数来实现的,并不返回一个值,而是yield(暂且叫作”生出“)一个值。
1 def generator_function():
2    """定义一个生成器函数"""
3    for i in range(10):
4       yield i
5 
6 #调用生成器,以证实是一个可迭代对象
7 # for item in generator_function():
8 #  print(item)
# 许多Python 2⾥的标准库函数都会返回列表,⽽Python 3都修改成了返回⽣成器,因为⽣成
# 器占⽤更少的内存资源。

1 # 计算斐波那契数列的⽣成器
2 def fibon(n):
3    a = b = 1
4    for i in range(n):
5       yield a
6       a, b = b, a + b
7 
8 for x in fibon(100):
9   print(x)
# 使用python的内置函数next()获取序列的下一个元素,到最后一个元素时,会抛出一个StopIteration的异常
# 使用for循环获取序列的下一个元素时,for循环会自动捕捉这个异常并停止调用next()。
1 def generator_function():
2    for i in range(3):
3       yield i
4 
5 # gen = generator_function()
6 # print(next(gen))
7 # print(next(gen))
8 # print(next(gen))
9 # print(next(gen))    # 验证,使用next()函数到所有值被yield完后会抛出一个StopIteration的异常

# 字符串类型也支持迭代,但不是迭代器,如下所示
my_string = "Michael"
#next(my_string) # 不是迭代器,不能使用next()函数,抛出TypeError。
# 但使用另一个内置函数iter()转换后,可以使用next()函数迭代
my_iter = iter(my_string)
print(next(my_iter)) # 经过iter()内置函数转换后,字符串对象可以迭代。

转载于:https://www.cnblogs.com/Micro0623/p/9950528.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值