工信部备案网站,网络推广工作内容怎么写,互联网推广渠道有哪些,wordpress商城 微信很多童鞋搞不懂python迭代器和生成器到底是什么#xff1f;它们之间又有什么样的关系#xff1f;这篇文章就是要用最简单的方式让你理解Python迭代器和生成器#xff01;迭代器和迭代过程维基百科解释道#xff1a;在Python中#xff0c;迭代器是遵循迭代协议的对象。使用…很多童鞋搞不懂python迭代器和生成器到底是什么它们之间又有什么样的关系这篇文章就是要用最简单的方式让你理解Python迭代器和生成器迭代器和迭代过程维基百科解释道在Python中迭代器是遵循迭代协议的对象。使用iter()从任何序列对象中得到迭代器如list, tuple, dictionary, set等。另一种形式的输入迭代器是generator生成器。很多容器诸如列表、字符串可以用for循环遍历对象。for语句会调用容器对象中的iter()函数 该函数返回一个定义了__next__()方法的迭代器对象该方法将逐一访问容器中的元素。所以说python中任意对象只要定义了__next__方法它就是一个迭代器。因此python中的容器如列表、元组、字典、集合、字符串都可以被称作迭代器。讲完迭代器后迭代就比较好理解了迭代就是从迭代器中取元素的过程。比如我们用for循环从列表[1,2,3]中取元素这种遍历过程就被称作迭代。# 列表是迭代器for element in [1, 2, 3]:print(element)# 元组是迭代器for element in (1, 2, 3):print(element)# 字典是迭代器for key in {one:1, two:2}:print(key)# 字符串是迭代器for char in 123:print(char)# 打开的text同样是迭代器for line in open(myfile.txt):print(line, end)如果你不想用for循环迭代呢这时你可以先调用容器以字符串为例的iter()函数再使用next()内置函数来调用__next__()方法当元素用尽时__next__()将引发 StopIteration 异常 s abc it iter(s) ititerator object at 0x00A1DB50 next(it)a next(it)b next(it)c next(it)Traceback (most recent call last):File stdin, line 1, in modulenext(it)StopIteration生成器 Generator看看廖雪峰大神的解释通过列表生成式我们可以直接创建一个列表。但是受到内存限制列表容量肯定是有限的。而且创建一个包含100万个元素的列表不仅占用很大的存储空间如果我们仅仅需要访问前面几个元素那后面绝大多数元素占用的空间都白白浪费了。所以如果列表元素可以按照某种算法推算出来那我们是否可以在循环的过程中不断推算出后续的元素呢这样就不必创建完整的list从而节省大量的空间。在Python中这种一边循环一边计算的机制称为生成器Generator。生成器也是一种迭代器但是你只能对其迭代一次。这是因为它们并没有把所有的值存在内存中而是在运行时生成值。你通过遍历来使用它们要么用一个for循环要么将它们传递给任意可以进行迭代的函数和结构。大多数时候生成器是以函数来实现的。然而它们并不返回一个值而是yield(暂且译作“生出”)一个值。每次对生成器调用next()时它会从上次离开位置恢复执行它会记住上次执行语句时的所有数据值。显示如何非常容易地创建生成器的示例如下:def reverse(data):for index in range(len(data)-1, -1, -1):yield data[index] for char in reverse(golf):... print(char)...flog可以用生成器来完成的操作同样可以用前一节所描述的基于类的迭代器来完成。但生成器的写法更为紧凑因为它会自动建__iter__()和__next__()方法。生成器表达式生成器不一定要用复杂的函数表示python提供了简洁的生成器表达式。从形式上来看生成器表达式和列表推导式很像仅仅是将列表推导式中的[]替换为()但是两者差别挺大生成器表达式可以说组合了迭代功能和列表解析功能。生成器表达式可以认为是一种特殊的生成器函数类似于lambda表达式和普通函数。但是和生成器一样生成器表达式也是返回生成器generator对象一次只返回一个值。 sum(i*i for i in range(10)) # sum of squares285 xvec [10, 20, 30] yvec [7, 5, 3] sum(x*y for x,y in zip(xvec, yvec)) # dot product260 from math import pi, sin sine_table {x: sin(x*pi/180) for x in range(0, 91)} unique_words set(word for line in page for word in line.split()) valedictorian max((student.gpa, student.name) for student in graduates) data golf list(data[i] for i in range(len(data)-1, -1, -1))[f, l, o, g]