python中的生成器和迭代器操作

在本文中将介绍python中的高级语法,生成器和迭代器


一、python的迭代器

迭代是python最强大的功能之一,通过这种方式可以访问集合元素。从字面上理解,迭代器就是支持迭代的容器,更准确的说,支持的是可迭代的容器类对象。包括列表,元组等python提供的基础容器,这些序列容器都有一个共同的特点,都支持for循环遍历存储的元素。而且在迭代的过程中,迭代器只能往前不会后退。同时迭代器也支持访问自定义的容器类对象,只要该容器支持迭代。迭代器有两个基本的方法iter()和next()。在自定义迭代器的过程中必须实现如下2个方法:
1.iter(self):该方法返回一个迭代器 需要使用return self直接返回实例对象本身,这个对象实现了__next__()方法,并通过StopIteration异常标识迭代的完成。
2.next(self):使用该方法返回一个特殊的迭代器对象。

1. 将字符串,列表对象用于创建迭代器

使用iter()创建迭代器对象,next输出下一个元素
将演示将一个字符串作为迭代器,例子如下:

str1 = 'hello!'
length = len(str1)
str1 = iter(str1)
for i in range(length):
    print(next(str1),end = ',')

h,e,l,l,o,!,

2.创建一个迭代器

把一个类作为迭代器使用需要实现两个方法__iter__()与__next__()。
将演示给一个迭代器赋值,然后使用next(),并将结果打印出来。

#创建迭代器,将存储结果按存入先后顺序依次输出
class listDemo:
    def __init__(self):
        self.__date = ''
        self.__step = 0
    def __next__(self):
        if self.__step > len(self.__date):
            raise StopIteration
        self.__step += 1 
        #返回下一个元素
        return self.__date[self.__step-1]
    def __iter__(self):
        #实例对象本身就是迭代器对象,因此直接返回 self 即可
        return self
    def __len__(self):
        return len(self.__date)
    #添加元素
    def get_value(self,value):
        self.__date = value

mylist = listDemo()
a      = input('please input your number:')
mylist.get_value(a)
mylist = iter(mylist)
len1   = len(mylist)
for i in range(len1):
    print(next(mylist),end = ' ')
print('\n')

结果:
please input your number:123456
1 2 3 4 5 6

二、python的生成器

在python中调用了yield的函数被称为生成器。生成器在本质上也是迭代器。yield部分功能和return相似,除了可以返回相应的值,当程序运行到yield语句时会将值返回,并暂停程序的执行并保存当前所有的运行信息,并在下一次执行next()方法时从当前位置继续运行。
将演示用生成器生成一个递增数组:

def order(len):
    print('----开始------')
    for i in range(len):
        yield i
        print('----继续----')

a = order(5)
print(next(a))
print(a.__next__())
for i in a:
    print(i)

结果
----开始------
0
----继续----
1
----继续----
2
----继续----
3
----继续----
4
----继续----

结果解释:
代码如下(示例):执行print(next(a))会执行a到yield,期间会执行print(’-----开始----’),然后返回i=0并打印,以此类推,在循环中执行a函数语句,并打印返回值。


如果有喜欢的小伙伴欢迎点赞,谢谢!best wishes!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值