python迭代器

迭代器的概念:

迭代是访问元素的一种方式。迭代器是一个可以集中遍历位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有元素被访问结束。迭代器只能往前不能往后

可迭代对象:

可以通过for ...in .... 这类语句迭代读取一条数据供我们使用的对象称之为可迭代对象(itrable)

判断方法:

from collections import Iterable

isinstance([],iterable)    #  True

可迭代对象的本质:

向使用者提供了一个记录访问数据,返回下一条数据的迭代器。(具备__iter__方法的对象就是一个可迭代对象)

判断对象是否是迭代器:

from collections import Iterator

isinstance([],Iterator)  #  False

isinstance(iter([]),Iterator)  #  True

迭代器对象Iterator

一个实现了 __iter__方法和 __next__ 方法的对象是迭代器

for... in ... 循环的本质

for item in Iterable 循环的本质就是先通过iter()函数获取可迭代对象Iterable的迭代器,然后对获取到的迭代器不断调用next()方法来获取下一个值并将其赋值给item,当遇到StopIteration的异常后循环结束。

迭代器的应用(斐波那契数列)

class FibIterator(object):
    def __init__(self, n):
        # 要求的前n个fiber数列
        self.n = n
        # 初始值
        self.num1 = 0
        self.num2 = 1

        # 记录下一个数字是否到需要结束
        self.current = 0

    def __next__(self):
        if self.current < self.n:
            num = self.num1
            self.num1, self.num2 = self.num2, self.num1 + self.num2
            self.current += 1
            return num
        else:
            raise StopIteration

    def __iter__(self):
        return self

if __name__ == '__main__':
    fib = FibIterator(10)
    # print(isinstance(fib, Iterator))
    print(fib)
    for x in fib:
        print(x, end=' ')

除了for循环能接收可迭代对象,list、tuple等也能接收可迭代对象:

li = list(FibIterator(15))
print(li)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
tp = tuple(FibIterator(6)) print(tp)
(0, 1, 1, 2, 3, 5)

转载于:https://www.cnblogs.com/maxiaohei/p/7794508.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在Python中,是一种用于遍历可代对象的对象。一个对象要成为,需要实现两个方法:__iter__和__next__。__iter__方法返回本身,而__next__方法返回下一个对象。\[1\] 本身也是可代的,所以它也要实现__iter__方法并返回自身。\[1\] 一个对象只有同时实现了__iter__和__next__方法,才能被称为。\[1\] 在Python中,可代对象是指实现了__iter__方法的对象。可代对象可以使用isinstance()函数来判断是否是可代对象。\[1\] 是可代对象的一种特殊形式,它具有返回下一个对象的功能。\[2\] 可以使用isinstance()函数来判断一个对象是否是。\[2\] 下面是一个示例代码,展示了如何实现一个和一个可代对象: ```python class MyIterator: def __init__(self, data): self.data = data self.index = 0 def __iter__(self): return self def __next__(self): if self.index >= len(self.data): raise StopIteration value = self.data\[self.index\] self.index += 1 return value class MyIterable: def __init__(self): self.data = \[\] def add(self, item): self.data.append(item) def __iter__(self): return MyIterator(self.data) myIterable = MyIterable() myIterable.add(1) myIterable.add(2) myIterable.add(3) print(isinstance(myIterable, Iterable)) # 输出True,表示myIterable是可代对象 print(isinstance(myIterable, Iterator)) # 输出False,表示myIterable不是 for item in myIterable: print(item) # 输出1、2、3 ``` 在上面的示例中,MyIterator是一个,它实现了__iter__和__next__方法。MyIterable是一个可代对象,它实现了__iter__方法并返回一个对象。通过使用isinstance()函数,我们可以判断一个对象是否是可代对象或。\[1\]\[2\] #### 引用[.reference_title] - *1* [Python(Iterator)](https://blog.csdn.net/weixin_45068714/article/details/126863082)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Python (Iterator)](https://blog.csdn.net/qq_45807032/article/details/105219674)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值