斐波拉契数列:

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 之生成器的更多相关文章

  1. python 列表生成器

    python 列表生成器 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 一个循环 在C语言等其他语言中,for循环一般是这样的 ...

  2. python 迭代器 生成器

    迭代器 生成器 一 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前 ...

  3. python中和生成器协程相关的yield from之最详最强解释,一看就懂(四)

    如果认真读过上文的朋友,应该已经明白了yield from实现的底层generator到caller的上传数据通道是什么了.本文重点讲yield from所实现的caller到coroutine的向下 ...

  4. python中和生成器协程相关yield from之最详最强解释,一看就懂(二)

    一. 从列表中yield  语法形式:yield from <可迭代的对象实例> python中的列表是可迭代的, 如果想构造一个生成器逐一产生list中元素,按之前的yield语法,是在 ...

  5. python中和生成器协程相关的yield之最详最强解释,一看就懂(一)

    yield是python中一个非常重要的关键词,所有迭代器都是yield实现的,学习python,如果不把这个yield的意思和用法彻底搞清楚,学习python的生成器,协程和异步io的时候,就会彻底 ...

  6. Python中生成器和迭代器的区别(代码在Python3.5下测试):

    https://blog.csdn.net/u014745194/article/details/70176117 Python中生成器和迭代器的区别(代码在Python3.5下测试):Num01–& ...

  7. Python的生成器进阶玩法

    Python的生成器进阶玩法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.yield的表达式形式 #!/usr/bin/env python #_*_coding:utf-8 ...

  8. python中“生成器”、“迭代器”、“闭包”、“装饰器”的深入理解

    一.生成器 1.什么是生成器? 在python中,一边循环一边计算的机制,称为生成器:generator. 2.生成器有什么优点? 1.节约内存.python在使用生成器时对延迟操作提供了支持.所谓延 ...

  9. python中生成器对象和return 还有循环的区别

    python中生成器对象和return 还有循环的区别 在python中存在这么一个关键字yield,这个关键字在项目中经常被用到,比如我写一个函数不想它只返回一次就结束那我们就不能用return,因 ...

  10. python中“生成器”、“迭代器”、“闭包”、“装饰器”的深入理解

    python中"生成器"."迭代器"."闭包"."装饰器"的深入理解 一.生成器 1.生成器定义:在python中,一边 ...

随机推荐

  1. RF --系统关键字开发

    需求: 接收一个目录路径,自动遍历目录下以及子目录下的所有批处理(.bat) 文件并执行. 首先在..\Python27\Lib\site-packages 目录下创建 CustomLibrary 目 ...

  2. Java 嵌套类和内部类演示样例&lt;二&gt;

    嵌套类(nested class)是一个在还有一个类或接口内部声明的类. 嵌套类分为两种:静态内部类(static inner class)和非静态嵌套类(non-static nested clas ...

  3. 在eclipse中添加android ADT

    对于程序开发的学者来说,eclipse并不陌生,它为我们提供了一个非常广阔的平台来开发程序.同样我们也可以用它来开发android程序. 但是在eclipse中并不能直接开发android程序,需要我 ...

  4. 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配

    // test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

  5. Ubuntu 14.04lts安装vncserver

    之前有在centos上安装过非常多次vncserver,也写过一个centos 7上的安装文档.近来常识了好几次在ubuntu上安装都没有成功,这次最终搞定了.ubuntu自带的桌面是unity.这个 ...

  6. MongoDB的选举过程(转)

    转自:http://www.mongoing.com/archives/295 MongoDB的复制集具有自动容忍部分节点宕机的功能,在复制集出现问题时时,会触发选举相关的过程,完成主从节点自动切换. ...

  7. 目标检测之基础hessian matrix ---海森矩阵

    就是海赛(海色)矩阵,在网上搜就有. 在数学中,海色矩阵是一个自变量为向量的实值函数的二阶偏导数组成的方块矩阵, Hessian矩阵是多维变量函数的二阶偏导数矩阵,H(i,j)=d^2(f)/(d(x ...

  8. activemq 搭建--集群

      linux activmemq 集群安装,配置和高可用测试       从 ActiveMQ 5.9 开始,ActiveMQ 的集群实现方式取消了传统的Master-Slave 方式,增加了基于Z ...

  9. [转]C#中的结构体与类的区别

    C#中的结构体与类的区别   经常听到有朋友在讨论C#中的结构与类有什么区别.正好这几日闲来无事,自己总结一下,希望大家指点. 1. 首先是语法定义上的区别啦,这个就不用多说了.定义类使用关键字cla ...

  10. 九度OJ 1081:递推数列 (递归,二分法)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6194 解决:864 题目描述: 给定a0,a1,以及an=p*a(n-1) + q*a(n-2)中的p,q.这里n >= 2. 求第 ...