day4 迭代器 生成器 装饰器 递归
2016-02-15 12:54
465 查看
见大王博客:http://www.cnblogs.com/alex3714/articles/5143440.html
迭代器就是过河的卒子,从第一个元素开始访问,直到所有的元素被访问结束,只能往前不能后退
优点:用于遍历大文件或集合
通过next()方法不断去下一个内容,python3内是 __next__()
生成器
一个函数调用时返回一个迭代器,那这个函数就是生成器,有yield的语法就变成了生成器
yield 和return
暂时可以理解为都是返回值,但执行了return后代表一个函数结束,下面的就不执行;有yield就成函数了生成器了,返回的是迭代器,通过next方法调用,接着上次的执行。
通过send实现yield的接收指定值返回
如下加上断点会清晰
递归:直接或间接调用自身算法的过程
迭代器就是过河的卒子,从第一个元素开始访问,直到所有的元素被访问结束,只能往前不能后退
优点:用于遍历大文件或集合
通过next()方法不断去下一个内容,python3内是 __next__()
>>> names = iter(['dribs','kaka','alex']) >>> >>> print names <listiterator object at 0x0000000001E0B940> >>> >>> print names.next() dribs >>> print names.next() kaka >>> print names.next() alex >>> print names.next() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>>
生成器
一个函数调用时返回一个迭代器,那这个函数就是生成器,有yield的语法就变成了生成器
yield 和return
暂时可以理解为都是返回值,但执行了return后代表一个函数结束,下面的就不执行;有yield就成函数了生成器了,返回的是迭代器,通过next方法调用,接着上次的执行。
通过send实现yield的接收指定值返回
如下加上断点会清晰
#使用yield实现单线程中的异步并发效果 import time def consumer(name): print("%s 准备吃包子啦!" %name) while True: baozi = yield print("包子[%s]来了,被[%s]吃了!" %(baozi,name)) def producer(name): c = consumer('A') c2 = consumer('B') c.__next__() c2.__next__() print("老子开始准备做包子啦!") for i in range(10): time.sleep(1) print("做了2个包子!") c.send(i) c2.send(i) producer("alex")
递归:直接或间接调用自身算法的过程
def calc(n): print('a',n) if n/2 > 1: res = calc(n/2) print(res) print("N:",n) return n calc(10)
相关文章推荐
- python笔记之字典的创建
- android技术博客
- 计算 signed short 的取值范围
- 二叉树的构建,线索化,以及线索二叉树的遍历c++语言表示(《数据结构》算法6.5,6.6,6.7)
- java web会话跟踪技术(深入理解HTTP Session与Cookie)
- oracle的序列使用注意
- 数据结构之动态数组实现
- C语言用链表管理你的感情史,方便又快捷,赶快试试吧!
- python编程常用模板总结
- POJ 2482 Stars in Your Window
- codeforces626E.Simple Skewness(三分)
- iOS 7 的多任务
- Error configuring application listener of class org.springframework.web.context.ContextLoaderListene
- BZOJ1138: [POI2009]Baj 最短回文路
- 百度编辑器ueditor的简单使用
- 手势滑动结束 Activity(一)基本功能的实现
- ORACLE 修改日志大小及增加日志成员
- 核心ASP.NET
- UICollectionView + UIKit Dynamics
- 比较Make和CMake