python生成器初步了解
一.生成器
生成器的本质就是迭代器 一个一个的创建对象
1.创建生成器的方式:
1.生成器函数
2.通过生成器表达式来获取生成器
3.类型转换
2.优点
节省内存 ,生成器本身就是代码,几乎不占用内存
3.特点
惰性机制,只能向前,不能反复
二.生成器函数
函数中包含了yield 这个函数就是生成器函数
def func():
print("你叫xxx?")
yield "alex"
print("真的?")
yield "真的"
print("Are you sure?")
yield "那叫我屌丝把"
ret = func() # 拿到的是ret生成器 只是产生一个生成器并不是运行
print(ret) # 只能是打印 生成器的地址 print(ret.__next__()) # 生成器就是迭代器,用next一个一个拿
print(ret.__next__())
print(ret.__next__())
print(ret.__next__()) # 没有下一个了就会出现 StopIteration 错误
1.yield
1.yield和return差不多 yield是分段执行一个函数
return是立即结束这个函数的执行
2.生成器在执行的时候返回生成器,而不是执行执行此函数
2.能向下执行的两个条件
1.__next__ 执行到下一个yield
2.send() 执行到下一个yield,给上一个yield位置传值.在第一次执行生成器的时候不能用send(),最后一个yield也不会传值
def fn():
print("韭菜盒子")
a = yield "西红柿炒番茄"
print("a",a)
b = yield "西红柿炒鸡蛋"
print("b",b)
c = yield "番茄炒鸡蛋"
print("c",c)
yield "火烧" gen = fn()
# send()可以给上一个yield位置传参
print(gen.__next__())
print(gen.send("番茄"))
print(gen.send("西红柿"))
print(gen.send("鸡蛋"))
3.获取生成器数据
1.所有生成器都是迭代器都可以使用for循环
2.都可以使用list()函数来获取生成器内所有的数据
4.生成器的记录
生成器中记录的是代码而不是函数的运行
当执行到__next__() 运行此空间中的代码,运行到yield结束
def func():
print("我的天哪 ")
yield "宝宝"
gen = func() # 创建生成器. 此时运行会把生成器函数中的代码记录在内存
三.推导式
1.列表推导式 [结果 for循环 if]
lst = [ i**2 for i in range(1,101) if i % 2 == 0]
print(lst)
2.字典推导式 {结果(k:v) for循环 if}
把字典的键值互换
dic = {"主食": "炒面", "副食": "小拌菜", "汤":"疙瘩汤"}
dic1 = { v:k for k,v in dic.items()}
print(dic1)
3.集合推导式 {结果(k) for循环 if}
四.生成器表达式
(结果 for循环 if)
g = (i for i in range(10)) #一次性生成器表达式 print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__()) # 用完就没了 想再次用必须再写一次表达式
五.yield from
def func():
lst = ["衣服%s" %i for i in range(500)]
yield from lst # 可以把一个可迭代对象分别进行yield返回 lst1 = ["python%s期" %i for i in range(1,19)]
yield from lst1 # 只有上面的yield next完才能轮到第二个
g = func()
print(g.__next__())
print(g.__next__())
python生成器初步了解的更多相关文章
- python——生成器
python——生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个 ...
- Python生成器-博文读后感
Windows 10家庭中文版,Python 3.6.4, 上午看过了一篇讲Python生成器的博文: 提高你的Python: 解释‘yield’和‘Generators(生成器)’(英文原文) 这篇 ...
- 小学生都能学会的python(生成器)
小学生都能学会的python(生成器) 1. 生成器 生成器的本质就是迭代器. 生成器由生成器函数来创建或者通过生成器表达式来创建 # def func(): # lst = [] # for i i ...
- Python 生成器 (generator) & 迭代器 (iterator)
python 生成器 & 迭代器 生成器 (generator) 列表生成式 列表生成式用来生成一个列表,虽然写的是表达式,但是储存的是计算出来的结果,因此生成的列表受到内存大小的限制 示例: ...
- python生成器学习
python生成器学习: 案例分析一: def demo(): for i in range(4): yield i g=demo() g1=(i for i in g) #(i for i in d ...
- 【python之路29】python生成器generator与迭代器
一.python生成器 python生成器原理: 只要函数中存在yield,则函数就变为生成器函数 #!usr/bin/env python # -*- coding:utf-8 -*- def xr ...
- Generator - Python 生成器
Generator, python 生成器, 先熟悉一下儿相关定义, generator function 生成器函数, 生成器函数是一个在定义体中存有 'yield' 关键字的函数. 当生成器函数被 ...
- python生成器原理剖析
python生成器原理剖析 函数的调用满足"后进先出"的原则,也就是说,最后被调用的函数应该第一个返回,函数的递归调用就是一个经典的例子.显然,内存中以"后进先出&quo ...
- 什么是Python生成器?与迭代器的关系是什么?
生成器是一个特殊的迭代器,它保存的是算法,每次调用next()或send()就计算出下一个元素的值,直到计算出最后一个元素,没有更多的元素时,抛出StopIteration.生成器有两种类型,一种是生 ...
随机推荐
- 斐波那契数列(python)
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 # -*- coding:utf-8 -*- class Solut ...
- layer数据表格换行
在使用layer数据表格的时候,默认是不可以换行的.这样显示 改动后 数据格式为 aa<br>bb就会显示为换行 比如我们的字符串是 a<br>b 这样的字符串浏览器 ...
- POJ3259 :Wormholes(SPFA判负环)
POJ3259 :Wormholes 时间限制:2000MS 内存限制:65536KByte 64位IO格式:%I64d & %I64u 描述 While exploring his many ...
- c#的Boolean.Parse用法
bool val; string input; input = bool.TrueString; val = bool.Parse(input); Console.WriteLine("'{ ...
- vue 添加子路由,并对路由重定向
// 用户信息首页 { path: '/user/index', name: 'userIndex', component: userIndex, redirect: '/user/index/sho ...
- 项目总结11:Centos部署JDK+Tomcat+MySQL文档(阿里云-网易云-华为云)
(如果不是root登陆,则输入:sudo su - 切换成root) 1.JDK安装 1-1-yum update (升级所有包同时也升级软件和系统内核) --安装中会有提示输入y就好(两个y,中 ...
- 单击Gridview中LinkButton,获取当前行索引及某单元格值,进行相关处理
1.在Gridview中添加模板列,在其中加入Linkbuttion,增加CommandName属性 (设置命令名),并赋值 <asp:TemplateField HeaderText=&quo ...
- java_2变量和运算符
1.变量 存储数据的容器. 2.变量创建的3要素 数据类型 变量名 = 变量值: 如int a = 10; 3.数据类型的自动转化 当小范围变量向大范围变量转化的时候,会发生这种情况.如int类型变 ...
- YII2中分页组件的使用
当数据过多,无法一页显示时,我们经常会用到分页组件,YII2中已经帮我们封装好了分页组件. 首先我们创建操作数据表的AR模型: <?php namespace app\models; use y ...
- thinkphp3.2集成QRcode生成二维码
一.下载QRcode源代码 https://sourceforge.net/projects/phpqrcode/files/releases/ 使用phpqrcode必须开启GD2扩展,phpqrc ...