简单了解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 相关文章推荐
定制FileField中的上传文件名称实例
Aug 23 Python
获取python文件扩展名和文件名方法
Feb 02 Python
在Python中给Nan值更改为0的方法
Oct 30 Python
Python调用服务接口的实例
Jan 03 Python
浅析python中while循环和for循环
Nov 19 Python
selenium中get_cookies()和add_cookie()的用法详解
Jan 06 Python
python使用paramiko实现ssh的功能详解
Mar 06 Python
python3 实现口罩抽签的功能
Mar 11 Python
python新式类和经典类的区别实例分析
Mar 23 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
Jun 02 Python
基于matplotlib中ion()和ioff()的使用详解
Jun 16 Python
python statsmodel的使用
Dec 21 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
浅析ThinkPHP中execute和query方法的区别
2014/06/13 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
2014/09/24 PHP
利用Laravel事件系统如何实现登录日志的记录详解
2017/05/20 PHP
PHP简单实现合并2个数字键数组值的方法
2017/05/30 PHP
北京奥运官方网站幻灯切换效果flash版打包下载
2008/01/30 Javascript
javascript小数计算出现近似值的解决办法
2010/02/06 Javascript
window.location.hash 使用说明
2010/11/08 Javascript
bootstrap data与jquery .data
2014/07/07 Javascript
使用jquery组件qrcode生成二维码及应用指南
2015/02/22 Javascript
jQuery地图map悬停显示省市代码分享
2015/08/20 Javascript
初识简单却不失优雅的Vue.js
2016/09/12 Javascript
Angular.js自定义指令学习笔记实例
2017/02/24 Javascript
node.js中fs.stat与fs.fstat的区别详解
2017/06/01 Javascript
Vue.js实现价格计算器功能
2020/03/30 Javascript
Vue2.0 http请求以及loading展示实例
2018/03/06 Javascript
Vue 框架之键盘事件、健值修饰符、双向数据绑定
2018/11/14 Javascript
vue移动端城市三级联动组件使用详解
2019/07/26 Javascript
Vue formData实现图片上传
2019/08/20 Javascript
Python引用传值概念与用法实例小结
2017/10/07 Python
Python实现的特征提取操作示例
2018/12/03 Python
使用Python控制摄像头拍照并发邮件
2019/04/23 Python
python flask框架实现传数据到js的方法分析
2019/06/11 Python
Python+pyplot绘制带文本标注的柱状图方法
2019/07/08 Python
基于Tensorflow使用CPU而不用GPU问题的解决
2020/02/07 Python
python识别验证码图片实例详解
2020/02/17 Python
浅谈Python中的异常和JSON读写数据的实现
2020/02/27 Python
解决Python数据可视化中文部分显示方块问题
2020/05/16 Python
python基于win32api实现键盘输入
2020/12/09 Python
Python 利用argparse模块实现脚本命令行参数解析
2020/12/28 Python
医疗保健专业人士购物网站:Scrubs & Beyond
2017/02/08 全球购物
亚历山大·王官网:Alexander Wang
2017/06/23 全球购物
VC++笔试题
2014/10/13 面试题
班长自荐书范文
2014/02/11 职场文书
搞笑征婚广告词
2014/03/17 职场文书
全运会口号
2014/06/20 职场文书
2015年财政所工作总结
2015/04/25 职场文书