Python3.x
来源:互联网 发布:广联达算量软件多少钱 编辑:程序博客网 时间:2024/05/21 08:58
迭代器
迭代器有两个重要部分
1._iter_()
用来获取迭代器对象
2.next()
获取容器内下一个元素
自定义一个迭代器
斐波列数列 1 1 2 3 5 8 等于前两个数相加。
class Fab(object): #构造函数 def __init__(self,max): self.max =max self.n, self.a, self.b = 0, 0, 1 def __iter__(self): return self def __next__(self): if self.n < self.max: r = self.b self.a, self.b = self.b,self.a + self.b self.n +=1 return r raise StopIteration() #迭代器没有更多的值了,异常处理
yield用法
如果我们要写一个斐波列数列的函数
第一次写可能是这样的
def fab(max): n, a, b = 0, 0, 1 while n < max: print(b) a, b = b, a+b n = n +1
没有返回值,使用print,不能让其他函数使用,
第二次,返回一个列表
def fab(max): n, a, b = 0, 0, 1 list = [] while n < max: list[n] = b a, b = b, a+b n = n +1
但是如果max = 1000000000能 内存岂不爆炸?
第三次
我们就考虑使用迭代器了
class Fab(object): #构造函数 def __init__(self,max): self.max =max self.n, self.a, self.b = 0, 0, 1 def __iter__(self): return self def __next__(self): if self.n < self.max: r = self.b self.a, self.b = self.b,self.a + self.b self.n +=1 return r raise StopIteration() #迭代器没有更多的值了,异常处理x = Fab(5)for i in x: print(i)
这样的话,内存占用一直是一个常数,但是这第三次的代码和第一次的代码比起来,好长。
简化之,使用yield
第四次
def fab(max): n, a, b = 0, 0, 1 while n < max: yield b a, b = b, a+b n = n +1x = fab(5)for i in x: print(i)
不能直接print yield类型的值 否则会输出一个
阅读全文
0 0
- Python3.x
- Python3.x
- python2.x ~ python3.x
- centos6.X升级python3.X
- python3.X的变化
- Python3.X学习笔记
- Python3.x区别
- python3.x学习小记
- python3.x Linux安装
- Python3.x urllib
- Python3.X 下载图片
- Python3.X 抓取网络资源
- Python2.x vs Python3
- suds for Python3.X
- Python3.x爬虫
- python3.x九九乘法表
- python3.x操作redis
- mac安装Python3.x
- CTF实验吧-简单的sql注入3【sqlmap直接跑】
- 学习笔记_02CNN
- ActionBar图标文字隐藏:
- 外卖聚合服务性能测试经验总结
- JavaScript NaN 属性
- Python3.x
- C++复合类型:指针和引用
- 文章标题
- Android 上传library到jcenter
- 第八届福建大学生程序设计竞赛-L Tic-Tac-Toe
- 太多switch case ,if else if
- cpu cache 学习记录
- cs231n作业一之 在cifar-10上实现KNN
- ThinkPHP 3.1.2 视图