简单了解python 生成器 列表推导式 生成器表达式


Posted in Python onAugust 22, 2019

生成器就是自己用python代码写的迭代器,生成器的本质就是迭代器。

通过以下两种方式构建一个生成器:

1、通过生成器函数

2、生成器表达式

生成器函数:

函数

def func1(x):
   x += 1
   return x
 print(func1(5))

生成器函数

def func1(x):
   x += 1
   yield x
 g_obj = func1(5)
 print(g_obj.__next__())

一个next对应一个yield。

yield VS return

return 结束函数,给函数的执行者返回值

yield 不会结束函数,一个next对应一个yield,给生成器对象。__next__()返回值。

生成器函数 VS 迭代器

区别1:自定制的区别:

l1 = [1,2,3,4,5]
 l1.__iter__()
 def func1(x):
   x += 1
   yield x
   x += 3
   yield x
   x += 5
   yield x
g1 = func1(5)
print(g1.__next__())
print(g1.__next__())
print(g1.__next__())

区别2:内存级别的区别。

迭代器是需要可迭代对象进行转化,可迭代对象非常占内存

生成器直接创建,不需要转化,从本质就节省内存

send & next

send与next一样,也是对生成器取值(执行一个yield)的方法。

send 可以给上一个yield传值,第一次取值永远都是next

最后一个yield永远也得不到send的值

列表推导式:一行代码搞定所需要的任何列表

循环模式 格式:[变量(加工后的变量)for 变量 in interable

lis = [i for i in range(1,101)]
print(lis)
lis = ['骑士计划%s期'% i for i in range(1,16)]
print(lis)
lis = [i**2 for i in range(1,11)]
print(lis)
print([i for i in range(1,31) if i % 3 == 0])
print([i*i for i in range(1,31) if i % 3 is 0 ])

筛选模式:

names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
     ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
print([q for name in names for q in name if q.count('e') >= 2])

列表推导式

优点:一行解决,方便

缺点:容易着迷,不易排错,不能超过三次循环

列表推导式不能解决所有列表的问题,无需刻意使用

生成器表达式:将列表推导式的 [] 换成 () 即可

g = (i for i in range(199))
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用apidoc管理RESTful风格Flask项目接口文档方法
Feb 07 Python
python实现list由于numpy array的转换
Apr 04 Python
浅谈Tensorflow模型的保存与恢复加载
Apr 26 Python
Python格式化输出%s和%d
May 07 Python
Python获取网段内ping通IP的方法
Jan 31 Python
Python函数中不定长参数的写法
Feb 13 Python
Python中函数的返回值示例浅析
Aug 28 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
Oct 17 Python
通过实例解析Python调用json模块
Dec 11 Python
Python函数__new__及__init__作用及区别解析
Aug 31 Python
用ldap作为django后端用户登录验证的实现
Dec 07 Python
python的setattr函数实例用法
Dec 16 Python
Python实现的微信红包提醒功能示例
Aug 22 #Python
Python PIL图片添加字体的例子
Aug 22 #Python
在python image 中安装中文字体的实现方法
Aug 22 #Python
解决Python3用PIL的ImageFont输出中文乱码的问题
Aug 22 #Python
用Pelican搭建一个极简静态博客系统过程解析
Aug 22 #Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
Aug 22 #Python
Django stark组件使用及原理详解
Aug 22 #Python
You might like
用php实现像JSP,ASP里Application那样的全局变量
2007/01/12 PHP
Gregarius中文日期格式问题解决办法
2008/04/22 PHP
PHP使用CURL获取302跳转后的地址实例
2014/05/04 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
2014/07/15 PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
2014/09/06 PHP
thinkphp普通查询与表达式查询实例分析
2014/11/24 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
2017/05/11 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
2019/10/04 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
Html中JS脚本执行顺序简单举例说明
2010/06/19 Javascript
Js 导出table内容到Excel的简单实例
2013/11/19 Javascript
JavaScript基本语法讲解
2015/06/03 Javascript
值得分享和收藏的Bootstrap学习教程
2016/05/12 Javascript
js删除数组元素、清空数组的简单方法(必看)
2016/07/27 Javascript
js获取Get值的方法
2016/09/29 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
2017/10/08 Javascript
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
2019/01/18 jQuery
[01:56]生活中的妖精之七夕特别档
2016/08/09 DOTA
[40:19]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.18
2020/12/19 DOTA
Python 中pandas.read_excel详细介绍
2017/06/23 Python
Python基于列表list实现的CRUD操作功能示例
2018/01/05 Python
Python元组常见操作示例
2019/02/19 Python
python根据txt文本批量创建文件夹
2020/12/08 Python
Python 等分切分数据及规则命名的实例代码
2019/08/16 Python
python实现计算器功能
2019/10/31 Python
python如何使用Redis构建分布式锁
2020/01/16 Python
北美最大的手工艺品零售商之一:Michaels Stores
2019/02/27 全球购物
Puccini乌克兰:购买行李箱、女士手袋网上商店
2020/08/06 全球购物
信息专业个人的自我评价
2013/12/27 职场文书
个人租房协议书
2014/11/28 职场文书
2015年度培训工作总结范文
2015/04/02 职场文书
圣诞晚会主持词
2015/07/01 职场文书
利用html+css实现菜单栏缓慢下拉效果的示例代码
2021/03/30 HTML / CSS
解决SpringCloud Feign传对象参数调用失败的问题
2021/06/23 Java/Android