python 之生成器
斐波拉契数列:
In [31]: def func(times):
...: alist = [0,1]
...: sum = 0
...: for i in range(times):
...:
...: sum = alist[-2] + alist[-1]
...: alist.append(sum)
...: sum = 0
...: return alist
...: In [32]: In [32]: print(func(5))
[0, 1, 1, 2, 3, 5, 8] In [33]: print(func(10))
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
有趣的面试题:
在没有第三个数的情况下,实现两个数值交换,a = 10,b= 9,交换后a = 9 ,b = 10
In [34]: a = 10 In [35]: b = 9 In [36]: a = a + b In [37]: b = a - b In [38]: a = a - b In [39]: a
Out[39]: 9 In [40]: b
Out[40]: 10
################生成器######################
[root@master gaoji]# cat test.py
#!/usr/local/bin/python3
# -*- coding:utf-8 -*- def creatNum():
print('----start---')
a,b = 0,1
for i in range(5):
print('---1---')
yield b
print('---2---')
a,b = b,a + b
print('---3---')
print('----stop----')
结果:
In [1]: import test In [2]: a = test.creatNum() In [3]: next(a)
----start---
---1---
Out[3]: 1 In [4]: next(a)
---2---
---3---
---1---
Out[4]: 1 In [5]: next(a)
---2---
---3---
---1---
Out[5]: 2 In [6]: next(a)
---2---
---3---
---1---
Out[6]: 3
################生成器之传送数据send################
[root@master gaoji]# vim test1.py
1 #!/usr/local/bin/python3
2 # -*- coding:utf-8 -*-
3
4
5 def test(): #第一次执行a.__next__() ,i=0,走到yield i,有yield返回数值0,此时停止不动,再执行a.__next__(),由yield 地方继续,此时并不是把yield i 的返回值
6 i = 0 赋值给temp,此时temp的值为None,再继续i+=1,此时i=1,符合while条件,继续下面的语句,此时有yield i,返回yield 1的值,输出1,又停止不动,等待a.__next__()的调用执行,一直循环
7 while i < 5:
8 temp = yield i
9 print(temp)
10 i+=1
运行结果:
[root@master gaoji]# python3
Python 3.5.4 (default, Oct 7 2017, 12:39:20)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from test1 import *
>>> a = test()
>>> a
<generator object test at 0x7f35bca38258>
>>> a.__next__()
0
>>> a.__next__()
None
1
>>> a.__next__()
None
2
>>> a.send("haha") ###如果使用send,则是把值传给变量
haha
3
>>> a.send("hello")
hello
4
###########使用案例场景##############
多任务案例,也就是多个任务同时进行
python 之生成器的更多相关文章
- python 列表生成器
python 列表生成器 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 一个循环 在C语言等其他语言中,for循环一般是这样的 ...
- python 迭代器 生成器
迭代器 生成器 一 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前 ...
- python中和生成器协程相关的yield from之最详最强解释,一看就懂(四)
如果认真读过上文的朋友,应该已经明白了yield from实现的底层generator到caller的上传数据通道是什么了.本文重点讲yield from所实现的caller到coroutine的向下 ...
- python中和生成器协程相关yield from之最详最强解释,一看就懂(二)
一. 从列表中yield 语法形式:yield from <可迭代的对象实例> python中的列表是可迭代的, 如果想构造一个生成器逐一产生list中元素,按之前的yield语法,是在 ...
- python中和生成器协程相关的yield之最详最强解释,一看就懂(一)
yield是python中一个非常重要的关键词,所有迭代器都是yield实现的,学习python,如果不把这个yield的意思和用法彻底搞清楚,学习python的生成器,协程和异步io的时候,就会彻底 ...
- Python中生成器和迭代器的区别(代码在Python3.5下测试):
https://blog.csdn.net/u014745194/article/details/70176117 Python中生成器和迭代器的区别(代码在Python3.5下测试):Num01–& ...
- Python的生成器进阶玩法
Python的生成器进阶玩法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.yield的表达式形式 #!/usr/bin/env python #_*_coding:utf-8 ...
- python中“生成器”、“迭代器”、“闭包”、“装饰器”的深入理解
一.生成器 1.什么是生成器? 在python中,一边循环一边计算的机制,称为生成器:generator. 2.生成器有什么优点? 1.节约内存.python在使用生成器时对延迟操作提供了支持.所谓延 ...
- python中生成器对象和return 还有循环的区别
python中生成器对象和return 还有循环的区别 在python中存在这么一个关键字yield,这个关键字在项目中经常被用到,比如我写一个函数不想它只返回一次就结束那我们就不能用return,因 ...
- python中“生成器”、“迭代器”、“闭包”、“装饰器”的深入理解
python中"生成器"."迭代器"."闭包"."装饰器"的深入理解 一.生成器 1.生成器定义:在python中,一边 ...
随机推荐
- Atitit.ati dwr的原理and设计 attilax 总结 java php 版本号
Atitit.ati dwr的原理and设计 attilax 总结 java php 版本号 1. dwr的长处相对于ajax来说.. 1 2. DWR工作原理 1 3. Dwr的架构 2 4. 自己 ...
- 设计模式之Visitor模式(笔记)
訪问者模式:表示一个作用于某个对象结构中的各元素操作.它使你能够不改变各元素的类的前提下定义作用于这些元素的新操作. 首先定义一个visitor抽象类,为每一个详细类声明一个visit操作 publi ...
- Struts2学习八----------接收参数
© 版权声明:本文为博主原创文章,转载请注明出处 接收参数 - 使用Action的属性接收参数 - 使用Domain Model接收参数 - 使用ModelDriven接收参数 实例 1.项目结构 2 ...
- spring-web中的WebDataBinder理解
Spring可以自动封装Bean,也就是说前台通过SpringMVC传递过来的属性值会自动对应到对象中的属性并封装成javaBean,但是只能是基本数据类型(int,String等).如果传递过来的是 ...
- 《C专家编程》数组和指针并不同--多维数组
<C专家编程>数组和指针并不同 标签(空格分隔): 程序设计论著笔记 1. 背景理解 1.1 区分定义与声明 p83 声明相当于普通声明:它所说明的并不是自身,而是描写叙述其它地方创建的对 ...
- WebStorm 常用功能
WebStorm 常用功能的使用技巧分享 WebStorm 是 JetBrain 公司开发的一款 JavaScript IDE,使用非常方便,可以使编写代码过程更加流畅. 本文在这里分享一些常用功能的 ...
- Unity3D研究院编辑器之重写Hierarchy的右键菜单
Hierarchy视图中选择一个游戏对象以后通过右键可以打开一个unity默认菜单,一般情况下都可以满足我们,但是我想真对某些特殊的游戏对象而展开特殊的菜单.如下图所示,比如这样: 代码: using ...
- python跳坑手记
解决python同目录报错:import util 改成 from . import util
- 【BZOJ3611】[Heoi2014]大工程 欧拉序+ST表+单调栈
[BZOJ3611][Heoi2014]大工程 Description 国家有一个大工程,要给一个非常大的交通网络里建一些新的通道. 我们这个国家位置非常特殊,可以看成是一个单位边权的树,城市位于顶 ...
- 用nvm管理windows nodejs时用npm全局安装的插件无法调用的解决方案
在环境变量中啊新建变量NODE_PATH赋值为prefix设置的地址即 prefix=D:\Users\xxx\AppData\Roaming\nodejs\npm-global 然后把%NODE_P ...