python基础知识_迭代器和生成器_2

迭代器的定义:
  1. 当类中定义了__iter__和__next__两个方法;
  2. __iter__方法需要返回对象本身,即:self;
  3. __next__方法,返回下一个数据,如果没有数据了,则需要抛出一个StopIteration的异常。
# 创建迭代器类
class IT(object):
    def __init__(self):
        self.counter = 0
        
    def __iter__(self):
        return self
    
    def __next__(self):
        self.counter += 1
        if self.counter == 3:
            raise StopIteration()
        return self.counter
    
# 根据类实例化创建一个迭代器对象:
obj1 = IT()

v1 = obj1.__next__()
print(v1)

v2 = next(obj1)   # 等价于 v2 = obj1.__next__();next()是python的内置函数,可帮我们自动去执行.__next__()函数python
print(v2)

v3 = next(obj1)
print(v3)
1
2



---------------------------------------------------------------------------

StopIteration                             Traceback (most recent call last)

~\AppData\Local\Temp\ipykernel_12184\3855014687.py in 
     22 print(v2)
     23 
---> 24 v3 = next(obj1)
     25 print(v3)
     26 


~\AppData\Local\Temp\ipykernel_12184\3855014687.py in __next__(self)
     10         self.counter += 1
     11         if self.counter == 3:
---> 12             raise StopIteration()
     13         return self.counter
     14 


StopIteration: 
obj2 = IT()
for item in obj2:
    print(item)
1
2

解析:

  1. IT 类有__iter__和__next__函数,且__iter__返回self, __next__规定了没有数据,就抛出StopInteration异常,所以IT类是一个迭代器类;
  2. obj1是迭代器类实例化的对象,所以obj1是迭代器对象;
  3. 迭代器对象可通过next函数取值,如果取值结束则自动抛出StopInteration。
  4. 迭代器对象可通过for进行循环;for循环的内部机制是:先执行迭代器对象的__iter__方法,然后将返回值(也就是迭代器对象本身obj2)获取到,然后不断执行next,将返回的结果赋值给item,(有异常StopInteration 则终止循环)
  5. 迭代:一步一步向前进,就比如开发一个软件的迭代周期一样。
生成器

定义:有yied的函数就叫生成器

## 创建生成器函数
def fun<

你可能感兴趣的:(#,python基础知识,python)