'''
1,什么是生成器?
函数内但凡有一个yield关键字,
再调用函数就不会执行函数代码,得到的返回值就是一个生成器对象
生成器本身就是一种迭代器
next(g)过程:
会触发生成器g所对应的函数的执行,直到遇到yield才停下来
然后把yield的返回值当做本次next操作的结果 2,为什么要用生成器?
学习生成器是为了掌握一种自定义的迭代器的方式 3,总结yield
1.yield提供一种自定义迭代器的方式
2,与return对比,都能返回值,都能返回多个值,都没有类型限制,而return只能返回一次值,而yield
可以返回多次值,yield 可以帮我们保存函数的执行状态 '''
def func():
print('first')
yield 1###暂停,
print('second')
yield 2
print('third') # g = func()
# print(g)#<generator object func at 0x0000025D76288480>
# # g.__iter__()
# # g.__next__()
# res = next(g)
# print(res)
#
# g = func()####要再掉用一次才会生成新的值
# next(g)
# res = next(g)
# print(res)
# # next(g) ###通过这种方式,可以获得一个无限生成数字的一个无限长度的数
def num():
i = 0
while True:
i += 1
print('111111')
yield i
num1 = num()
print(num1.__next__())
print(num1.__next__())
print(num1.__next__()) ##自己定义一个迭代器,实现range的功能 range(1,100,2) #用传统的函数做
# def my_range(start,stop,step = 1):
# # res = []
# # while start < stop:
# # res.append(start)
# # start += step
# # return res
# # res = my_range(1,1000,2)
# # print(res)
#用迭代器实现
def my_range(start,stop,step = 1):
while start < stop:
yield start
start += step
res = my_range(1,10000,2)
print(res)
res.__next__()
res.__next__()
res.__next__()
res.__next__()
res.__next__()
res.__next__()
# print(res.__next__())
# print(res.__next__())
# print(res.__next__())
# print(res.__next__())
# print(res.__next__())
# print(res.__next__())
###################################
###################################
##yelid的表达式形式应用
def dog(name):
print('狗哥%s准备开吃' %name)
while True:
food = yield ###暂停 fooc = yield = None
print('狗哥%s吃了%s' %(name,food)) g = dog('alex')
next(g)####让狗准备好,让生成器对象先暂停到一个位置,准备接受
g.send('骨头')
###g.send()的作用和next的作用相类似,都是返回到上一次函数执行的位置,也就是上一次yeild的位置
###开始执行这个函数,但是在执行函数之前,会先把send()括号后面的参数传递给yeild,然后再开始执行函数
###直到遇到下一个yeild停止或者整个函数结束
g.send('泔水')
g.send('泔水') next(g)
next(g)
###################################
'''
掌握的重点:
1,迭代器
什么是可迭代对象以及什么是迭代器对象(*****)
迭代器的使用 next(g) (***** )
迭代器的优缺点(*****)
for 循环的工作机制(*****)
2,生成器
自定义迭代器的方式(****)
在函数体内使用yeild 值
表达式形式yeild的应用
注意:g.send(None) 完全等同于next(g).强调,对于表达式形式yeild
的生成器在使用前必须先用next(g)或者g.send(None)初始化一次 '''
###################################

Python生成器的原理及使用的更多相关文章

  1. python生成器原理剖析

    python生成器原理剖析 函数的调用满足"后进先出"的原则,也就是说,最后被调用的函数应该第一个返回,函数的递归调用就是一个经典的例子.显然,内存中以"后进先出&quo ...

  2. Python 中生成器的原理

    生成器的使用 在 Python 中,如果一个函数定义的内部使用了 yield 关键字,那么在执行函数的时候返回的是一个生成器,而不是常规函数的返回值. 我们先来看一个常规函数的定义,下面的函数 f() ...

  3. python——生成器

    python——生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个 ...

  4. 【python之路29】python生成器generator与迭代器

    一.python生成器 python生成器原理: 只要函数中存在yield,则函数就变为生成器函数 #!usr/bin/env python # -*- coding:utf-8 -*- def xr ...

  5. Python分布式爬虫原理

    转载 permike 原文 Python分布式爬虫原理 首先,我们先来看看,如果是人正常的行为,是如何获取网页内容的. (1)打开浏览器,输入URL,打开源网页 (2)选取我们想要的内容,包括标题,作 ...

  6. Python Socket通信原理

    [Python之旅]第五篇(一):Python Socket通信原理   python Socket 通信理论 socket例子 摘要:  只要和网络服务涉及的,就离不开Socket以及Socket编 ...

  7. python解释执行原理(转载)

    Python解释执行原理 转自:http://l62s.iteye.com/blog/1481421 这里的解释执行是相对于编译执行而言的.我们都知道,使用C/C++之类的编译性语言编写的程序,是需要 ...

  8. Python生成器-博文读后感

    Windows 10家庭中文版,Python 3.6.4, 上午看过了一篇讲Python生成器的博文: 提高你的Python: 解释‘yield’和‘Generators(生成器)’(英文原文) 这篇 ...

  9. python虚拟机运行原理

    近期为了面试想要了解下python的运行原理方面的东西,奈何关于python没有找到一本类似于深入理解Java虚拟机方面的书籍,找到了一本<python源码剖析>电子书,但是觉得相对来说最 ...

随机推荐

  1. 易忘&有用 的冷门Anaconda命令

    Python接触有将近2年了,但是在倒腾anaconda环境的时候,总有一些命令忘记需要查半天,今天趁着配置pytorch,特此总结一下,留待后用. 1. 创建和删除环境 创建环境 conda cre ...

  2. angular笔记_10

    过滤器 currency:1:2:3                     与货币相关 第一个参数是符号 第二个参数是保留小数点几位 number:1                         ...

  3. Jupyter notbook& REVEAL.JS& nbconvert 使用jupyter notebook制作slides

    使用Jupyter notebook作为slide主要有两个方面: 在运行notebook 的时候可以幻灯片播放 这样幻灯片就有了notebook可交互的功能,而notebook就有了幻灯片全屏容易分 ...

  4. 使用163.com邮箱发送邮件

    不要直接使用登录的密码,而是用配置中的授权码做为密码

  5. git删除掉已经保存的用户名密码

    以保存的用户名密码删除,先找到变量存在的位置: git config -l To help track down the setting, I'd try to use: git config --l ...

  6. [LeetCode] Preimage Size of Factorial Zeroes Function 阶乘零的原像个数函数

    Let f(x) be the number of zeroes at the end of x!. (Recall that x! = 1 * 2 * 3 * ... * x, and by con ...

  7. 第二天(就业班) html的引入、html常用标签、实体标签、超链接标签、图片标签、表格、框架标签、表单[申明:来源于网络]

    第二天(就业班) html的引入.html常用标签.实体标签.超链接标签.图片标签.表格.框架标签.表单[申明:来源于网络] 第二天(就业班) html的引入.html常用标签.实体标签.超链接标签. ...

  8. 基于STM32的USB枚举过程学习笔记(转)

    之前使用ST官方的库以及网络的资料,完成了使用USB HID类进行STM32和PC机的通讯.由于其他原因并没有深入的分析,虽然实现了功能,但是关于USB设备的枚举,以及具体的通讯方式都没有清晰的概念, ...

  9. 消除 ASP.NET Core 告警 "No XML encryptor configured. Key may be persisted to storage in unencrypted form"

    在 ASP.NET Core 中如果在 DataProtection 中使用了 PersistKeysToFileSystem 或 PersistKeysToFileSystem services.A ...

  10. [转]BT原理分析

    BitTorrent协议. BT全名为BitTorrent,是一个p2p软件,你在下载download的同时,也在为其他用户提供上传upload,因为大家是“互相帮助”,所以不会随着用户数的增加而降低 ...