Python全栈之路8--迭代器(iter)和生成器(yield)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python全栈之路8--迭代器(iter)和生成器(yield),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2072字,纯文字阅读大概需要3分钟。
内容图文
一、生成器( iter )
从Python2.2起,生成器提供了一种简洁的方式帮助返回列表元素的函数来完成简单和有效的代码。
它基于yield指令,允许停止函数并立即返回结果。
此函数保存其执行上下文,如果需要,可立即继续执行。
1、对比 range 和 xrange 的区别
>>> print range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> print xrange(10) xrange(10)
如上代码所示,range会在内存中创建所有指定的数字,而xrange不会立即创建,只有在迭代循环时,才去创建每个数组。
def nrange(num): temp = -1 while True: temp = temp + 1 if temp >= num: returnelse: yield temp
# !/usr/bin/env python # _*_ coding:utf-8 _*_ def xrange(): print(11) yield 1 print(22) yield 2 print(33) yield 3 # 仅仅获取到了一个生成器 #含有yield的函数叫做生成器函数 r = xrange() #这是一个生成器#生成器的__next__方法 ret = r.__next__() print(ret) ret = r.__next__() print(ret) ret = r.__next__() print(ret)
# !/usr/bin/env python # _*_ coding:utf-8 _*_ def n2(start,stop): start = start while stop: yield start start +=1 def xrange2(start,stop): obj = n2(start,stop) for i in range(start,stop): j = obj.__next__() print(j) def n1(stop): start = 0 while stop: yield start start +=1 def xrange1(stop): obj = n1(stop) for i in range(stop): j = obj.__next__() print(j) def xrange(*args): if len(args) == 1: xrange1(*args) elif len(args) == 2: xrange2(*args) else: print("参数不对 1 or 2") if__name__ == "__main__": xrange(2,11)
2、文件操作的 read 和 xreadlinex 的的区别
read会读取所有内容到内存 xreadlines则只有在循环迭代时才获取
def NReadlines(): with open( ‘ log ‘,‘r‘) as f: while True: line = f.next() if line: yield line else: returnfor i in NReadlines(): print i
def NReadlines(): with open( ‘ log ‘,‘r‘) as f: seek = 0 while True: f.seek(seek) data = f.readline() if data: seek = f.tell() yield data else: returnfor item in NReadlines(): print item
二、迭代器 iterators
迭代器仅是一容器对象,它实现了迭代器协议。它有两个基本方法:
1)next方法
返回容器的下一个元素
2)__iter__方法
返回迭代器自身
迭代器可使用内建的iter方法创建,见例子:
>>> i = iter(‘abc‘) >>> i.next() ‘a‘ >>> i.next() ‘b‘ >>> i.next() ‘c‘ >>> i.next() Traceback (most recent call last): File "<string>", line 1, in <string> StopIteration:
原文:http://www.cnblogs.com/mosson/p/5855141.html
内容总结
以上是互联网集市为您收集整理的Python全栈之路8--迭代器(iter)和生成器(yield)全部内容,希望文章能够帮你解决Python全栈之路8--迭代器(iter)和生成器(yield)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。