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

python中的生成器和迭代器 *** 作,第1张

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

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

文章目录
  • 一、python的迭代器
    • 1. 将字符串,列表对象用于创建迭代器
    • 2.创建一个迭代器
  • 二、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!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5670466.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存