20和遍历以及迭代器有关的一些东西

知识点有点散,只能这样记录了

1、这边是和遍历有关的:

class Person:
    def __init__(self):
        self.result = 1
    def __getitem__(self, item):
        self.result += 1
        if self.result >= 6:
            raise StopIteration('停止遍历')
        return self.result
    pass

p = Person()
for i in p:
    print(i)

还有一种方法,没看明白

2、迭代器很久很久之前学过next()是敲一下,打印一下。敲一下,打印一下。这里也是一样

class Person:
    def __init__(self):
        self.result = 1
    def __next__(self):
        self.result += 1
        if self.result >= 6:
            raise StopIteration('无法打印')
        return self.result
p =Person()
print(next(p))
print(next(p))
print(next(p))

3、迭代器的一些机理说明

class Person:
    def __init__(self):
        self.age = 1
    def __iter__(self):
        self.age = 1
        return self
    def __next__(self):
        self.age += 1
        if self.age >= 6:
            raise StopIteration('stop')
        return self.age
p=Person()
for i in p:
    print(i)
for i in p:
    print(i)
print(p.age)

在这里说一下,迭代器一定能通过next访问,但是能通过next访问的不一定是迭代器

在这里 for in 的这个结构能用好多次!!!


具体方法机理为:用for in访问迭代器的时候会访问def__liter__这样一个方法。然后不断地去调用next方法获取数据,直到碰到异常为止


第二次使用p实例的时候,又访问 又初始化为1 了

20和遍历以及迭代器有关的一些东西_第1张图片

只有在两个方法都实现了,才是一个完整的迭代器!!!一个是iter 一个是next

4、iter的本质:

iter的本质是什么?iter的本质是,把东西搞成可迭代器,把对象放过来就是迭代器,然后可以用next去访问迭代器。

你可能感兴趣的:(conch的代码学习,python,开发语言)