在本文中将介绍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!