最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • python迭代器与生成器用途是什么

    正文概述    2020-07-26   325

    python迭代器的用途:用next函数获取下一个元素,只能向前取值,不会后退。python生成器的用途:动态提供数据,调用return生成一个StopIteration异常,通知next(it)函数不再提供数据。

    python迭代器与生成器用途是什么

    一、迭代器

    什么是迭代器

    迭代器是指用iter(可迭代对象)函数返回的对象(实例)

    迭代器可以用next(it)函数获取可迭代对象的数据

    迭代器函数:

    iter(iterable)从可迭代对象中返回一个迭代器,iterable必须是一个能提供迭代器的可迭代对象

    next(iterator)从迭代器iterator中获取下一条记录,如果无法获取下一条记录,则触发StopIteration异常

    说明:

    迭代器是访问可迭代对象的一种方式

    迭代器只能向前取值,不会后退

    用iter函数可以返回一个可迭代对象的迭代器

    示例:

    L = [2,3,4]或者 L = range(2,5)
    it = iter(L)#使用iter函数使it绑定一个迭代器对象
    next(it)#返回2
    next(it)#返回3
    next(it)#返回4
    next(it)#触发StopIteration异常

    迭代器的用途:

    迭代器对象能用next函数获取下一个元素

    示例:

    #此示例示意用迭代器来访问可迭代对象
    #用for语句访问可迭代对象L
    L = [2,3,5,7]
    for x in L:
    print(x)
    #用while语句访问可迭代对象L
    it = iter(L)
    while True:
    try:
    x = next(L)
    print(x)
    except StopIteration:
    print('终止迭代,迭代器不能提供任何数据')
    break

    二、生成器Generator(python2.5之后)

    什么是生成器:

    生成器是能够动态提供数据的对象(不是一次性生成从而不占据内存空间),生成器对象也是可迭代对象(实例)

    生成器有两种:

    生成器函数

    生成器表达式

    生成器函数定义:

    含有yield语句的函数是生成器函数,此函数被调用时将返回一个生成器对象

    yield语句

    语法:yield 表达式

    说明:yield用于def函数中,目的是将此函数作为生成器函数使用

    yield用来生成数据,供迭代器next(it)函数使用

    实例:

    #此示例示意生成器函数的定义及示意
    def myyield():
    '''此函数为生成器函数'''
    yield 2#生成2
    yield 3#生成3
    yield 5#生成5
    #用for语句访问myyield函数
    for x in myyield():
    print(x)
    #用迭代器访问
    gen = myyield()
    it = iter(gen)
    next(it)

    生成器函数说明:

    (1)生成器函数的调用将返回一个生成器对象,生成器对象是一个可迭代对象

    (2)在生成器函数调用return时会生成一个StopIteration异常来通知next(it)函数不再能提供数据

    示例:

    #写一个myinteger(n)函数
    def myinteger(n):
    for x in range(n):
    yield x
    #for循环访问生成器
    for x in myinteger(int(input('请输入整数:')))
    print(x)
    #用迭代器访问
    it = iter(myinteger(10))
    while True:
    print(next(it))#到10时发生StopIteration错误

    生成器表达式:

    语法:(表达式 for 变量 in 可迭代对象 [if 真值表达式])

    作用:用推导式的形式生成一个新的生成器

    示例:

    gen = (x**2 for x in range(1,4))#并没有生成数据
    #gen = [x**2 for x in range(1,4)]#先在内存中生成数据
    it = iter(gen)
    next(it)#1
    next(it)#4
    next(it)#9
    next(it)#StopIteration

    列表推导式和生成表达式的区别:

    生成器是动态生成的,现用现生成,列表表达式是静态的。

    示例:

    L = [1,2,3,4]
    gen = (x for x in L)#gen绑定生成器
    lst = [x for x in L]#lst绑定列表
    L[1] = 222#改变原列表的第二个元素
    for x in lst:
    print(x)#1 2 3 4不变
    for x in gen:
    print(x)#1 222 3 4 ,第二个数是222

    迭代工具函数:

    迭代工具函数的作用是生成一个个性化的可迭代对象

    函数:

    zip( iter1 [,iter2,iter3,…])返回一个zip对象,此对象用于生成一个元组,此元组的个数由最小的可迭代对象决定

    enumerate(iterable[,start])生成带索引的枚举类型,返回迭代类型为索引-值队(index,value)对,默认索引从零开始,也可以使用start绑定

    示例1:

    numbers = [10086,10000,10010,95588]
    names = ['中国移动','中国电信','中国联通']
    for x in zip(numbers,names):
    print(x)
    #生成元组:
    #(10086,'中国移动')
    #(10000,'中国电信')
    #(10010,'中国移动')
    #for n,a in zip(numbers,names):
    #print(n,a)
    #d = dict(zip(names,number))生成字典
    #for x in zip(range(10),numbers,names):
    # print(x)x为三个对象组成的一个元组

    示例2:

    #实现机制
    def myzip(iter1,iter2):
    it1 = iter(iter1)
    it2 = iter(iter2)
    while True:
    x = next(it1)
    y = next(it2)
    yield (x,y)
    for x in myzip(range(100),range(50))
    #示例3:
    names = list('string')
    for x in enumerate(names,start = 100):
    print(x)#指定start会使索引从start开始
    #(1000,'s') (101,'t')..返回元组的索引-值对,默认索引从0开始
    #index = element = x
    #print('索引是',index,'对应的元素是',element)

    推荐课程:python基础语法全讲解视频(马哥教育2014版)


    起源地下载网 » python迭代器与生成器用途是什么

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元