斐波拉契数列:

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. java中url正则regex匹配

    String regex = "^(?:https?://)?[\\w]{1,}(?:\\.?[\\w]{1,})+[\\w-_/?&=#%:]*$"; 解释说明: ^ : ...

  2. android 编译问题解决

    1.android4.2.2 '/root/origin_android/mokesoures/out/target/common/obj/APPS/ApplicationsProvider_inte ...

  3. redis错误error记录

    早上登服务器,看到程序的redis的报错, 具体如下: (error) MISCONF Redis is configured to save RDB snapshots, but is curren ...

  4. EF Core 日志跟踪sql语句

    EF Core 日志跟踪sql语句 官方文档链接:https://docs.microsoft.com/en-us/ef/core/miscellaneous/logging 1.新增自定义ILogg ...

  5. 不错的iOS相关的主页或站点 (更新于14-06-22)

    近期一直没事在翻一些站点看看资料学习下. 推荐几个不错的站点: http://www.raywenderlich.com/   这个站点有各种各样的教程,可惜是大部分都是英文教程,只是阅读起来还好.每 ...

  6. C语言补漏(1)--- char到int赋值的一个陷阱

    作为一个C的新手(虽然学的第一门语言就是C,可是用C实际开发项目却是最近的事情),对使用C过程中遇到的各类问题.疑惑.知识漏洞进行弥补无疑是非常有必要的,于是决定将每次遇到的知识漏洞写到博客上. 今天 ...

  7. IDEA下使用Jetty进行Debug模式调试

    过程例如以下: (1)找到选项卡中的 –Run– 然后找到 –Edit Configurations (2)点击下图中绿色的plus–找到Maven点进去 (3)依照下边的方式在Command lin ...

  8. sizeof运用

    解析:ss1是一个字符指针,指针的大小是一个定值,就是4字节,所以sizeof(ss1)是4字节.ss2是一个字符数组,这个数组最初未定大小,由具体填充值来定.填充值是“0123456789”.1个字 ...

  9. LoadRunner hits per second 深入理解

    Hits per Second Graph The Hits per Second graph shows the number of HTTP requests made by Vusers to ...

  10. Something Starts While Something Ends

    (1)最终还是没能参加比赛,一次都没有机会. (2)有梦想,不到最后一刻不会放弃. (3)这里应该会搬次家,转到github上. (4)作为一个新手,什么东西都需要从头学起来,就从最基础的数据结构开始 ...