Python 入门之 Python三大器 之 生成器

1、生成器

(1)什么是生成器?

核心:生成器的本质就是一个迭代器

迭代器是Python自带的

生成器程序员自己写的一种迭代器

def func():
print("这是一个函数")
return "函数"
func() def func():
print("这是一个生成器")
yield "生成器"

(2)生成器的编写方式:

<1> 基于函数编写
<2> 推导式编写

(3)生成器函数:

​ 通过生成器函数构建生成器

<1> 函数体中出现yield代表要声明一个生成器 (generator -- 生成器)

<2> 一个yield 对应 一个 next()

def func():
msg = input("请输入内容")
yield msg
print("这是第二次启动")
yield "生成器2"
yield "生成器3"
yield "生成器4" g = func()
print(next(g))
print(next(g))
print(next(g))
print(next(g)) # 生成器的本质就是迭代器.迭代器如何取值,生成器就如何取值

<3>yield 和 return 的区别:

1>相同点:
都是返回内容
都可以返回多个,但是return写多个只会执行一个
2>不同点:
return终止函数 yield是暂停生成器
yield 能够记录当前执行位置

(4)生成器的作用:节省空间

(5)使用场景:

当文件或容器中数据量较大时,建议使用生成器

(6)区别什么是迭代器,什么是生成器?

<1> 通过地址:

​ 迭代器的地址:<list_iterator object at 0x000000987B6E97F0>

​ 生成器的地址:<generator object func at 0x00000087C2A10CA8>

<2> 通过send()方法: (send()方法第一次必须发送None)

没有send()方法就是迭代器
有send()方法就是生成器
def func():
a = yield 1
print(a)
b = yield 2
print(b) g = func()
print(g.send(None)) # send -- 发送
print(g.send("alex")) # send -- 发送
print(g.send("宝元")) # send -- 发送
1>send和next()区别:

​ 相同点:

​ send 和 next()都可以让生成器对应的yield向下执行一次。

​ 都可以获取到yield生成的值。

​ 不同点:

​ 第一次获取yield值只能用next不能用send(可以用send(None))。

​ send可以给上一个yield置传递值。

(7)yield 和 yield from的区别:

yield 将可迭代对象一次性返回

yield from 将可迭代对象逐个返回

def func():
def foo():
print(11)
lst = {"key":1,"key1":2}
yield foo print(func().__next__()) def func():
lst = [1,2,3,45,6]
lst1 = ["alex","wusir","taibi","baoyuan"]
yield from lst
yield from lst1 g = func() for i in g:
print(i) lst = [1,2,3,45,6]
lst1 = ["alex","wusir","taibi","baoyuan"] for i in lst,lst1:
print(i)

(8)可迭代对象、迭代器、生成器的比较:

可迭代对象

​ 优点:list , tuple .str 节省时间,取值方便,使用灵活(具有自己私有方法)

​ 缺点:大量消耗内存

迭代器

​ 优点:节省空间

​ 缺点:不能直接查看值,使用不灵活,消耗时间,一次性,不可逆行

生成器

​ 优点:节省空间,人为定义

​ 缺点:不能直接查看值,消耗时间,一次性,不可逆行

Python 入门之 Python三大器 之 生成器的更多相关文章

  1. Python 入门之 Python三大器 之 装饰器

    Python 入门之 Python三大器 之 装饰器 1.开放封闭原则: (1)代码扩展进行开放 ​ 任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改.所以我们必须允许代 ...

  2. Python 入门之 Python三大器 之 迭代器

    Python 入门之 Python三大器 之 迭代器 1.迭代器 (1)可迭代对象: <1> 只要具有__ iter __()方法就是一个可迭代对象 (我们可以通过dir()方法去判断一个 ...

  3. Python入门基础学习 三

    Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...

  4. Python 入门之Python简介

    Python 入门之Python简介 1.Python简介: (1) Python的出生: ​ python的创始人为吉多·范罗苏姆(Guido van Rossum)(中文名字:龟叔).1989年的 ...

  5. Python入门之 Python内置函数

    Python入门之 Python内置函数 函数就是以功能为导向,一个函数封装一个功能,那么Python将一些常用的功能(比如len)给我们封装成了一个一个的函数,供我们使用,他们不仅效率高(底层都是用 ...

  6. Python 入门之Python基础数据类型及其方法

    Python 入门之Python基础数据类型 1. 整型:int 用于计算,用于比较 (在赋值的时候先执行等号右边的内容) 1.1 整数的加 a = 10 b = 20 print(a + b) 结果 ...

  7. Python 入门之Python基础知识

    Python 入门之Python基础知识 1.变量 (1)变量就是把程序运行的中间结果临时存在内存中,以便后续代码使用 (2)变量的作用: 昵称,就是代指内存中某个地址中的内容 a = 123 变量名 ...

  8. visual studio 2015 搭建python开发环境,python入门到精通[三]

    在上一篇博客Windows搭建python开发环境,python入门到精通[一]很多园友提到希望使用visual studio 2013/visual studio 2015 python做demo, ...

  9. 2018-06-20 中文代码示例视频演示Python入门教程第三章 简介Python

    知乎原链 Python 3.6.5官方入门教程中示例代码汉化后演示 对应在线文档: 3. An Informal Introduction to Python 不知如何合集, 请指教. 中文代码示例P ...

随机推荐

  1. php上传大文件

    1.使用PHP的创始人 Rasmus Lerdorf 写的APC扩展模块来实现(http://pecl.php.net/package/apc) APC实现方法: 安装APC,参照官方文档安装,可以使 ...

  2. 南昌网络赛 H The Nth Item

    南昌网络赛The Nth Item 暴力快速幂+unordered_map记忆化 注意:记忆化不能写到快速幂求解函数里,不断调用函数会造成很大的时间浪费 #include<bits/stdc++ ...

  3. bootstrap editable初始化后表单可修改数据

    function loadData() { var url = "${ctx }/sys/marketing/product/page"; $('#tablepager').boo ...

  4. Springboot application 本地HTTPS配置

    使用keytool 命令,生成一个数字证书: keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore key.p1 ...

  5. pymysql(一)检索、增加、更新、删除数据

    (一)  SELECT 检索数据 代码如下: import pymysql '''pymysql使用指南host = '127.0.0.1'回送地址,指本地机port = 3306MySQL的默认端口 ...

  6. Vue/Element-ui 安装搭建开发环境(一)

    Element 是饿了么全段开发团队推出的一套基于 vue.js2.0 的 PC Web 端开发框架. Element 中文文档:https://element.eleme.cn/#/zh-CN 1. ...

  7. C#调用windows API实现 smallpdf客户端程序进行批量压缩

    一.背景 Smallpdf 网站针对PDF文件提供了非常齐全的功能:PDF 与 Word.PPT.Excel.JPG 的相互转化.PDF 的压缩.编辑.合并.分割.解密.加密等功能,用户无需注册即可免 ...

  8. 修改web项目发布路径

    Eclipse中用Tomcat发布的Web项目,更改其部署路径 我的Eclipse的工作目录是D:/workspace先配置Tomcat 选择你的tomcat版本 点击next 这里先不要把项目添加进 ...

  9. HTML和JS完成页面点击四个角弹出管理页面

    实现方法1: HTML代码: <div class="top-left-corner"></div> <div class="top-rig ...

  10. 前端需要注意哪些SEO

    1.合理的title.description.keywords:搜索对这三项的权重逐个减小,title值强调重点即可,重要关键词不要超过2次,而且要靠前,不同页面title要有所不同:descript ...