Python中的迭代器&生成器

1. 迭代器

1.1 迭代器

  • 迭代:迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代

  • 迭代器:帮助对某种对象(str/list/tuple类所创建的对象..)中的y元素一一获取.表象:具有__next__方法,每次迭代都返回一个值

    • 列表转换成迭代器:
      • lis = iter([1,2,4,2])
      • lis= [1,2,4,2]._ _ iter __()
    • 迭代器想要获取每个值就要反复调用:val = lis.__ next __()
      • 直到报错Stopinteration取到最后一个元素
    • 判断一个对象是否是迭代器:内部是否有__ next __方法.
    v1 = [11,22,33,44]
    
    # 列表转换成迭代器
    v2 = iter(v1)
    result1 = v2.__next__()
    print(result1)
    result2 = v2.__next__()
    print(result2)
    result3 = v2.__next__()
    print(result3)
    result4 = v2.__next__()
    print(result4)
    result5 = v2.__next__()
    print(result5)
    """
    # v1 = "alex"
    # v2 = iter(v1)
    # while True:
    #     try:
    #         val = v2.__next__()
    #         print(val)
    #     except Exception as e:
    #         break
    

1.2 可迭代对象

  • 具有__inter__方法的就是可迭代对象,并且返回一个迭代器,才成为可迭代对象

    v1= [11,22,33,44]
    result= v1.__iter__()
    
  • 能被for循环的就是可迭代对象

2.生成器

  • 函数中存在yield,那么该函数为生成器函数,调用生成器函数会返回一个生成器,生成器只有被for循环时,生成器函数内部的代码才会执行,每次驯化都会获取yield返回的值.
  • 基本格式:
##生成器函数存在yield
def func(*args)
	*args=1
    yield 1
    yield 2   
func('a')
#函数内部代码不会执行,返回一个生成器对象
v = func('a')
#生成器是可以被for循环,一旦开始循环name函数内部代码就会开始执行.
for item in v:
    print(item)    #循环开始,函数运行,yield 返回值,停止第一次循环,再次循环时从上一次yield的位置开始运行
  • 生成数字:
    • return 可以做终止命令,不会返回值
def func():
    count = 1
    while True:
        yield count
        count += 1
        
val = func()

for item in val:
    print(item)

总结

  • 迭代器,对可迭代对象中的元素进行逐一获取,迭代器对象的内部都有一个 __next__方法,用于以一个个获取数据。
  • 可迭代对象,可以被for循环且此类对象中都有 __iter__方法且要返回一个迭代器(生成器)。
  • 生成器,函数内部有yield则就是生成器函数,调用函数则返回一个生成器,循环生成器时,则函数内部代码才会执行。
    • 生成器是特殊的迭代器(**):
原文地址:https://www.cnblogs.com/bigox/p/10738799.html