简单了解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 相关文章推荐
Python 转义字符详细介绍
Mar 21 Python
python实现生命游戏的示例代码(Game of Life)
Jan 24 Python
Python即时网络爬虫项目启动说明详解
Feb 23 Python
Python3使用pandas模块读写excel操作示例
Jul 03 Python
代码详解django中数据库设置
Jan 28 Python
详解python做UI界面的方法
Feb 27 Python
python+openCV利用摄像头实现人员活动检测
Jun 22 Python
django 类视图的使用方法详解
Jul 24 Python
python中的Elasticsearch操作汇总
Oct 30 Python
如何在 Django 模板中输出 "{{"
Jan 24 Python
Python学习笔记之装饰器
Aug 06 Python
Python自动发送和收取邮件的方法
Aug 12 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发送邮件知识点
2018/05/06 PHP
通过修改referer下载文件的方法
2008/05/11 Javascript
JavaScript 字符串乘法
2009/08/20 Javascript
js编写trim()函数及正则表达式的运用
2013/10/24 Javascript
JavaScript伸缩的菜单简单示例
2013/12/03 Javascript
jQuery实现统计输入文字个数的方法
2015/03/11 Javascript
浅谈js数据类型判断与数组判断
2016/08/29 Javascript
jQuery中的AjaxSubmit使用讲解
2016/09/25 Javascript
JavaScript 中调用 Kotlin 方法实例详解
2017/06/09 Javascript
Bootstrap datepicker日期选择器插件使用详解
2017/07/26 Javascript
vue组件实现文字居中对齐的方法
2017/08/23 Javascript
原生JS获取元素的位置与尺寸实现方法
2017/10/18 Javascript
ES6 javascript中class类的get与set用法实例分析
2017/10/30 Javascript
JavaScript从原型到原型链深入理解
2019/06/03 Javascript
angular中的post请求处理示例详解
2020/06/30 Javascript
Python导入txt数据到mysql的方法
2015/04/08 Python
python常见数制转换实例分析
2015/05/09 Python
python基础教程之分支、循环简单用法
2016/06/16 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
2018/08/25 Python
python 执行终端/控制台命令的例子
2019/07/12 Python
PyQT5 emit 和 connect的用法详解
2019/12/13 Python
浅谈python之自动化运维(Paramiko)
2020/01/31 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
python使用Geany编辑器配置方法
2020/02/21 Python
python如何实时获取tcpdump输出
2020/09/16 Python
python和node.js生成当前时间戳的示例
2020/09/29 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
2020/11/15 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
2020/11/18 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
2020/12/21 Python
CSS3中伪元素::before和::after的用法示例
2017/09/18 HTML / CSS
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
英国最大的户外商店:Go Outdoors
2019/04/17 全球购物
日期和时间问题
2015/01/04 面试题
2014年平安创建工作总结
2014/11/24 职场文书
2014年劳动部工作总结
2014/12/11 职场文书
Golang流模式之grpc的四种数据流
2022/04/13 Golang