标签:sof div 二次 规则 显示 函数 方法 class 中括号
生成器类似返回值为数组的一个函数,这个函数可以接受参数,可被调用,但只能产生一个值,所以大大节省内存。
生成器表达式的语法非常简单,只需要将列表推导式的中括号改成小括号就可以了
1 [x+x for x in range(10) if x%2==0]#会打印出整个列表
[0, 4, 8, 12, 16]
1 (x+x for x in range(10) if x%2==0)#按某种程序规则存储起来,只隐士的显示出来
<generator object <genexpr> at 0x7fbb230ebe50>
调用生成器的方法也非常简单,用循环直接打出即可,或用next()函数打印单个元素。但是生成器里的对象只能被读取一次,就会从内存中消失。
1 g=(x+x for x in range(10) if x%2==0) 2 for i in g: 3 print(i)
0 4 8 12 16
尝试第二次打印
1 for i in g: 2 print(i)#因为被读取过,所以打印为空
next()获取
1 c=(x+x for x in range(10) if x%2==0) 2 next(c)
0
1 next(c)
4
直到调用最后一个对象之后再用next() 会出现Stopiteration的报错。
1、协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象
(实际for语句的内部实现应该就是首先调用对象的__iter__方法,获取一个迭代器对象,接着不停的调用迭代器对象的__next__方法,循环遍历取值。)
2、可迭代对象:简单来讲可用for循环的对象,如list、dict、set等都是可迭代的对象。
3、迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个stoplteration报错,最后结束迭代。
4、可迭代对象可通过iter()函数转化成迭代器
1 a=iter(list("python"))#用iter(可迭代对象)创建迭代器 2 a
<list_iterator at 0x7fc9158dbb90>
next(a)
‘p‘
标签:sof div 二次 规则 显示 函数 方法 class 中括号
原文地址:https://www.cnblogs.com/ye20190812/p/13355999.html