python中的iter迭代

python 专栏收录该内容
54 篇文章 0 订阅

具体解释了怎么用迭代,怎样用迭代,怎样转换成迭代,可以看看

  • 列表,字典,元组,字符串,集合可以使用迭代
  • 自定义类中可以定义iter方法,来使用迭代
  • iter方法意为可以迭代
  • iterator意为定义迭代的对象(既有__iter__方法,也有__next__方法)

(一)

from collections.abc import Iterable
from collections.abc import Iterator


import time
class Person(object):
    def __init__(self):
        self.names = list()
        self.current_num = 0
    def add_person(self,name):
        self.names.append(name)

    def __iter__(self):
        #pass
        return PersonsIterator(self)

class PersonsIterator(object):
    def __init__(self,obj):
        self.obj = obj
        self.current_num = 0
    def __iter__(self):
        pass
    def __next__(self):
        #pass
        #return 12345
        if self.current_num < len(self.obj.names):
            ret = self.obj.names[self.current_num]
            self.current_num += 1
            #return self.obj.names[self.current_num]
            return ret
        else:
            raise StopIteration


p1 = Person()
p1.add_person('张三')
p1.add_person('李四')
p1.add_person('王五')

p_iter = iter(p1)
while True:
    try:
        ret = next(p_iter)
        print(ret)
    except Exception:
        break

运行结果:

 

 (二)

from collections.abc import Iterable
from collections.abc import Iterator


import time
class Person(object):
    def __init__(self):
        self.names = list()
        self.current_num = 0
    def add_person(self,name):
        self.names.append(name)

    def __iter__(self):
        #pass
        return PersonsIterator(self)

class PersonsIterator(object):
    def __init__(self,obj):
        self.obj = obj
        self.current_num = 0
    def __iter__(self):
        pass
    def __next__(self):
        #pass
        #return 12345
        if self.current_num < len(self.obj.names):
            ret = self.obj.names[self.current_num]
            self.current_num += 1
            #return self.obj.names[self.current_num]
            return ret
        else:
            raise StopIteration


p1 = Person()
p1.add_person('张三')
p1.add_person('李四')
p1.add_person('王五')


print(isinstance(p1,Iterable))  #判断是否可以迭代
# iter()的作用是调用p1的iter()方法
# next()的作用是调用迭代器的next方法
p_Iterator = iter(p1)
print(isinstance(p_Iterator,Iterator)) #判断是否为迭代器

for temp in p1:
    print(temp)
    time.sleep(1)
    

运行结果:

 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值