【代码学习】PYTHON 生成器

一、生成器

一遍循环一遍计算的机制,称为生成器

二、生成器的特点:

1、节约内存

2、迭代到下一次的调用时,所使用的参数都是第一次所保留下的,即是说,在整个所有函数调用的参数都是第一次所调用时保留的,而不是新创建的

三、创建方法

1、把列表生成式的[]改为()

#列表
L = [x*2 for x in range(5)]
print L
#生成器
G = (x*2 for x in range(5))
print G

以上代码运行结果

[0, 2, 4, 6, 8]
<generator object <genexpr> at 0x0000000002E40AF8>

2、yield 生成

yield 自动终止返回结果。

循环从终止的地方向下进行

def  creatNum():
    print ("----start----")
    i = 0
    while i < 5:
        temp = yield i
        print(temp)
        i+= 1
#创建一个生成器对象
a = creatNum()
#让对象开始执行,第一次从头开始执行,如果之前执行过,就从上一次停止的地方开始执行
next(a)

以上代码运行结果

----start----
>>> next(a)
None
1
>>> next(a)
None
2
>>> a.send("SQYY")
SQYY
3
>>> next(a)
None
4
>>> 

四、补充:

send()

执行到yield时,gen函数作用暂时保存send发送过来的值

c.next()等价c.send(None)

时间: 2024-11-05 13:50:15

【代码学习】PYTHON 生成器的相关文章

编写高质量代码改善python程序91个建议学习01

编写高质量代码改善python程序91个建议学习 第一章 建议1:理解pythonic的相关概念 狭隘的理解:它是高级动态的脚本编程语言,拥有很多强大的库,是解释从上往下执行的 特点: 美胜丑,显胜隐,简胜杂,杂胜乱,平胜陡,疏胜密 python定义 #python排序 def quicksort(arr): less=[];greater=[] if len(arr)<=1: return arr pivot=arr.pop() for x in arr: if x<=pivot: less

python学习之生成器yield

python学习之生成器yield **yield的作用是使函数生成一个结果序列而不是一个值,任何使用yield的函数都称为生成器,调用生成器会创建一个对象,该对象通过连续调用next()或者__next__()方法生成结果序列** 一般情况 >>> def count(n,m): >>> print('这是一个循环外部测试') >>> while n>0: >>> print('这是一个循环内部测试') >>>

重新学习python系列(一)? WTF?

重新学习python:两年前学了点python之后就一直没做做过啥项目, 基本上全忘光了,复习一下搞点事情 or |and & ord() ascii转16进制 chr()  16进制转ascii >>> u'ABC'.encode('utf-8') 'ABC' >>> u'中文'.encode('utf-8') '\xe4\xb8\xad\xe6\x96\x87' >>> 'abc'.decode('utf-8') u'abc' >&g

收藏-千行代码入门Python

github地址:GitHub - xianhu/LearnPython: 以撸代码的形式学习Python 很多人反应打不开,可能是因为网速的原因.内容较多,耐心等待一会! ============================================================ 自己以代码的形式整理的Python入门文档,不算空行.注释等,应该不到一千行. 认认真真读完.练习完这些代码,应该就能上手工作了. 可能在网页上显示的效果不理想,可以手动复制下来粘贴到文本文件中,利用no

D03——C语言基础学习PYTHON

C语言基础学习PYTHON--基础学习D02 20180804内容纲要: 1 函数的基本概念 2 函数的参数 3 函数的全局变量与局部变量 4 函数的返回值 5 递归函数 6 高阶函数 7 匿名函数 8 函数式编程 9 小结 10 小练习:ATM+购物车程序 1 函数的基本概念 a 函数定义 b 函数特性 c 定义函数 a 定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可. b 特性: 减少重复代码 使程序变的可扩展 使程序变得易维护 c:语法

学习Python随想

进入大三之后进入了一周基本都是专业课的状态,虽然相比之前几个学期课时量减少了,但实际上学要学习的任务却大大增加了,而类似于Python,spss这一类的课程是之前之前并没有听说过的,但在上过两周之后发现,Python是类似于c语言一类的课程,而之前的c语言和数据结构学得并不好,所以其实在内心深处是有一丝丝的惧怕的,希望在实践课上能多做一些类似于第一次的学打代码的联系,多找找感觉. 课堂进度十分之快,时而跟得上时而跟不上,而一旦跟不上就会跟多米诺骨牌似的,影响接下来的课堂学习.在智慧云教室最大的感

Python生成器(yield)

对于调用一个普通的Python函数,一般是从函数的第一行代码开始执行,结束于return语句.异常或者函数所有语句执行完毕.一旦函数将控制权交还给调用者,就意味着全部结束.函数中做的所有工作以及保存在局部变量中的数据都将丢失.再次调用这个函数时,一切都将从头创建.Python是通过生成器来实现类似于协同程序的概念:生成器可以暂时挂起函数,并保留函数的局部变量等数据,然后在再次调用它的时候,从上次暂停的位置继续执行下去. 提高你的 Python:解释 yield 和 Generators(生成器)

【个人计划】告别英雄联盟,开始学习Python

不知不觉中接触英雄联盟已经快两年了,记得是大四那年找完工作,一下比较清闲,宿舍刚好有lol的氛围,于是乎,四个新手在何大神的带领下,走上了lol的道路.不得不说,从那以后,花费在lol上的时间太多啦,据我估计,个人玩了将近2000了吧,别看局数这么多,其实就是个渣渣,技术太菜了,这也就是我告别英雄联盟的原因啦,根本没有玩这个游戏的天赋,技术上没有一点点提高,一直就是在浪费时间罢了. 就我个人而言,1.在补兵方面,时好时坏,而且有时候性子急,不太注重前期的补兵发育,往往导致输的结局:2.游戏中大部

Python 生成器&迭代器

Python 生成器 带有 yield 的函数在 Python 中被称之为 generator(生成器),用斐波那契数列: def fab(max):     n, a, b = 0, 0, 1     while n < max:         yield b         a, b = b, a + b         n = n + 1 执行: 1 2 3 4 5 6 7 8 9 >>> for n in fab(5):     print n 1 1 2 3 5 简单地

Python学习--Python基础语法

第一个Python程序 交互式编程 交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编写代码. linux上你只需要在命令行中输入 Python 命令即可启动交互式编程,提示窗口如下: Window上在安装Python时已经已经安装了默认的交互式编程客户端,提示窗口如下: 在Python提示符中输入一下文本,然后按回车查看运行结果: print 'hello world'; 输出: hello world 脚本式编程 让我们来写一个简单的Python脚本,所有的Pytho