Python高级语法(16)迭代器

Python高级语法(1)抽象类

Python高级语法(2)多继承和MRO继承机制

Python高级语法(3)global和nolocal关键字使用详解

Python高级语法(4)魔法函数__init__/__del__/__new__

Python高级语法(5)魔法函数__str__/__repr__即str和repr的联系与区别的本质

Python高级语法(6)魔法函数__len__和__contains__即in和len()的本质

Python高级语法(7)魔法函数__getitem__/__setitem__/__delitem__即字典通过key取值赋值等本质

Python高级语法(8)魔法函数__enter__/__exit__即with上下文管理器的本质

Python高级语法(9)魔法函数__call__让对象像函数一样调用

Python高级语法(10)魔法函数__getattr__/__setattr__/__delattr__/__getattribute__对属性设置查询等的底层拦截处理

Python高级语法(11)多线程、多进程、协程简介与选择

Python高级语法(12)编码规范即pep8详解

Python高级语法(13)python中的一切皆对象

Python高级语法(14)type、object和class的关系

Python高级语法(15)装饰器

Python高级语法(16)迭代器

Python高级语法(17)map,filter,reduce,zip,lambda的应用

  • Iterable,可迭代:
    一个类实现了__iter__()函数,则这个类是可迭代的,通常__iter__()函数必须返回一个
    实现了__next__()的类的对象,当然如果自己实现了__next__(),也可以返回自己
  • Iterator 迭代器:
    同时实现了__iter__()和__next__()的对象,就是迭代器
class Student():
    def __init__(self,name):
        self.name=name
        self.start=0

    def __iter__(self):
        return self

    def __next__(self):
        if self.start <len(self.name):
            result=self.name[self.start]
            self.start+=1
            return result
        else:
            raise StopIteration

s=Student("Jack Macial")
for elem in s:
    print(elem)

执行结果如下:

J
a
c
k
 
M
a
c
i
a
l

下面查看next函数的使用

class Student():
    def __init__(self,name):
        self.name=name
        self.start=0

    def __iter__(self):
        return self

    def __next__(self):
        if self.start <len(self.name):
            result=self.name[self.start]
            self.start+=1
            return result
        else:
            raise StopIteration

s=Student("Jack Macial")
print(next(s))
print(next(s))
print(next(s))
print(next(s))
print(next(s))
print(next(s))
print(next(s))
print(next(s))
print(next(s))
print(next(s))
print(next(s))
print(next(s))

执行结果如下:

J
a
c
k
 
M
a
c
i
a
l
Traceback (most recent call last):
  File "G:/python_flask/test.py", line 29, in <module>
    print(next(s))
  File "G:/python_flask/test.py", line 15, in __next__
    raise StopIteration
StopIteration

おすすめ

転載: blog.csdn.net/redrose2100/article/details/121298396