xml地图|网站地图|网站标签 [设为首页] [加入收藏]

python迭代器与生成器,迭代器和生成器

来源:http://www.ccidsi.com 作者:呼叫中心培训课程 人气:69 发布时间:2019-05-22
摘要:一、什么是迭代器 一.迭代器协议:对象必须提供二个next方法,实施该方法依然回到迭代中的下壹项,要么就引起叁个StopIteration格外,以甘休迭代(只好以往走不能够往前退) 二.可迭代

一、什么是迭代器

一.迭代器协议:对象必须提供二个next方法,实施该方法依然回到迭代中的下壹项,要么就引起叁个StopIteration格外,以甘休迭代(只好以往走不能够往前退)

二.可迭代对象:完成了迭代器协议的对象(怎样促成:对象内部定义三个__iter__()方法)

三.协商是1种约定,可迭代对象达成了迭代器协议,python的其福建中华南理教院程公司具(如:for循环,sum,min,max函数等)使用迭代器协议访问对象

1,什么是迭代器协议

迭代器和生成器

2、for循环的本质

for循环的真相:循环全体指标,全是使用迭代器协议

字符串、列表、元祖、字典、集结、文件对象那些都不是可迭代对象(未有依照迭代器协议,未有next方法),只不过在for循环时调用了中间的__iter__调换来了可迭代对象而已

li = [1, 2, 3]

aa = li.__iter__()  # 将列表转换为可迭代对象

print(aa)

print(aa.__next__())  # 调用next方法
print(aa.__next__())
print(aa.__next__())

  

注:

  for其实做了三件事:

    1.将列表调换为可迭代对象

    2.调用了__next__()方法

    三.将StopIteration非凡管理了

1.迭代器协议是指:对象必须提供一个next方法,实施该措施或许重返迭代中的下壹项,要么就引起贰个StopIteration卓殊,认为止迭代 (只好将来走无法往前退)

一、迭代器

三、生成器

能够清楚为一种数据类型,这种数据类型自动完结了迭代器协议,所以生成器就是可迭代对象

生成器的创导格局:

  • 生成器函数:常规函数定义,可是利用yield语句而不是return语句再次来到结果;yield语句一回回到一个结出,在每一种结果中间,挂起函数的情状,以便下一次从它离开的地点继续施行
  • 生成器表达式:类似于列表推导,不过生成器再次回到按需产生结果的三个对象,而不是贰遍创设1个结果列表

生成器函数

def fun():
    print("hhloo")
    yield 1
    print("44444")
    yield 2
    print('dddddd')
    yield 3

g = fun()  # 生成器对象
print(g)   # 结果:<generator object fun at 0x00000000010373B8>

# 进行一次打印
print(g.__next__())  # 第一次next时调用函数到yield 1处函数返回,结果为hhloo,1
print(g.__next__())  # 第二次会从上一次离开的地方继续往下执行,结果:44444,2
print(g.__next__())  # 第三次执行   结果为:dddddd,3
print(g.__next__())  # 会抛StopIteration异常

  

生成器表明式

ccc = ('鸡蛋%s' % i for i in range(10))
print(ccc)   # <generator object <genexpr> at 0x0000000000A273B8>
print(ccc.__next__())

  

注:

  生成器表明式比生成器函数更加的节约内部存款和储蓄器

 

生成器注意项

  • 生成器在发出的经过中不做任何操作
  • 生成器只好遍历二次

    def fun1():

    for i in range(4):
        yield i
    

    t = fun1()

    t1 = (i for i in t) t2 = (i for i in t1)

print(list(t1))  # [0, 1, 2, 3]
print(list(t2))  # []

  

生成器的长处

  • 生成器的裨益便是延迟总结,叁次回到3个结实,它不会一次变动全部的结果。对于大数目管理,将会分外实用
  • 生成器还是能管用的提供代码的可读性,使用生成器会使python代码更加的pythonic

贰.可迭代对象:实现了迭代器协议的指标(怎么样达成:对象内部定义四个__iter__()方法)

  1、迭代器协议指的是指标必须提供1个next方法,实践该措施可能重回迭代中的下一项,要么就挑起二个StopIteration非常,以截至迭代 (只可以以后走无法往前退)

三.探讨是1种约定,可迭代对象实现了迭代器协议,python的中间工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象。

  二、可迭代对象:完结了迭代器协议的目的(怎么着贯彻:对象内部定义叁个__iter__()方法)

2,for循环的原形

  三、协议是壹种约定,可迭代对象完结了迭代器协议,python的中间工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象。

巡回全部指标,全是使用迭代器协

  四、迭代器的优缺点:

for循环能够遍历(字符串,列表,元组,字典,群集,文件对象),可是那些都不是可迭代对象,只不过在for循环式,调用了她们中间的__iter__办法,把她们形成了可迭代对象。

      优点:不借助于索引取;惰性总括,节本省部存款和储蓄器。

接下来for循环调用可迭代对象的__next__措施去取值,而且for循环会捕捉StopIteration格外,以截止迭代。

      缺点:不及根据索引的取值方便;三回性取值,只可以未来取不可能往前退;不可能获得长度。

 

  伍、迭代器的使用:壹.提供了一种不正视索引的统一的迭代方法
           2.惰性总括,比方取文件的每1行

#:用while去模拟for循环做的事情
l=[1,2,3,4,5,6]
diedai_l=l.__iter__()
while True:
    try:
        print(diedai_l.__next__())
    except StopIteration:#捕捉到异常后退出
        break

  注:迭代的意思:重复操作,下一回重复操作的靶子是基于上二遍重复操作的结果。

 

    迭代器既有__iter__又有二个__next__主意而可迭代对象只有__iter__方法

叁,如何查看是否可迭代的或是否迭代器

二、生成器

 

  一、什么是生成器:

from collections import Iterable
from collections import  Iterator
a=range(10)
a=range(10)
print(isinstance(a,Iterator))#查看是不是迭代器
print(isinstance(a,Iterable))#查看是不是可迭代的

    能够理解为一种数据类型,这种数据类型自动达成了迭代器协议(其余的数据类型须要调用本人置于的__iter__主意),所以生成器正是迭代器

 

  二、生成器的施用:

4,什么是生成器

    生成器函数:常规函数定义,可是,使用yield语句而不是return语句重临结果。yield语句贰回回到3个结出,在种种结果中间,挂起函数的情形,以便后一次从它离开的位置继续推行

能够清楚为一种数据类型,这种数据类型自动落成了迭代器协议(其余的数据类型要求调用本身置于的__iter__主意),所以生成器正是可迭代对象

    生成器表达式:类似于列表推导,可是,生成器再次来到按需产生结果的3个指标,而不是一遍构建二个结出列表

伍,生成器在python中的表现情势

  3、yield的功能:
    壹.与return类似,都足以重回值,但不相同的地方在于yield重回多次值,而return只能回到一回值
    二.为函数封装好了__iter__和__next__主意,把函数的施行结果做成了迭代器
    三.依照迭代器的取值方式obj.__next__(),触发的函数的推行,函数暂停与再持续的事态都以由yield保存的

 

  4、send的功能:

本文由68399皇家赌场发布于呼叫中心培训课程,转载请注明出处:python迭代器与生成器,迭代器和生成器

关键词: 68399皇家赌场

最火资讯