简单了解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生成指定尺寸缩略图的示例
May 07 Python
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
May 23 Python
Python ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
Jun 10 Python
python获得一个月有多少天的方法
Jun 04 Python
详解Python中 __get__和__getattr__和__getattribute__的区别
Jun 16 Python
Python连接PostgreSQL数据库的方法
Nov 28 Python
Python基于time模块求程序运行时间的方法
Sep 18 Python
Django框架 Pagination分页实现代码实例
Sep 04 Python
Python3离线安装Requests模块问题
Oct 13 Python
python3.6、opencv安装环境搭建过程(图文教程)
Nov 05 Python
利用python3 的pygame模块实现塔防游戏
Dec 30 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
Mar 03 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转成EXE文件
2006/10/09 PHP
php生成静态文件的多种方法分享
2012/07/17 PHP
CI(CodeIgniter)框架介绍
2014/06/09 PHP
php实现高效获取图片尺寸的方法
2014/12/12 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
Node.js开发指南中的简单实例(mysql版)
2013/09/17 Javascript
JS小功能(checkbox实现全选和全取消)实例代码
2013/11/28 Javascript
jquery 表格排序、实时搜索表格内容(附图)
2014/05/19 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
2014/12/08 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
2015/01/09 Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
2015/03/03 Javascript
AngularJS实现ajax请求的方法
2016/11/22 Javascript
Vue.js第一天学习笔记(数据的双向绑定、常用指令)
2016/12/01 Javascript
angularjs实现多张图片上传并预览功能
2017/02/24 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
js实现倒计时关键代码
2017/05/05 Javascript
vue引入swiper插件的使用实例
2017/07/19 Javascript
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
2014/08/22 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
2018/10/15 Python
Django Rest framework之认证的实现代码
2018/12/17 Python
Python 面向对象之类class和对象基本用法示例
2020/02/02 Python
浅析Python中字符串的intern机制
2020/10/03 Python
让IE9以下版本的浏览器兼容HTML5的方法
2014/03/12 HTML / CSS
医院办公室主任职责
2013/12/29 职场文书
社区学雷锋活动策划方案
2014/01/30 职场文书
适用于所有创业者的创业计划书
2014/02/05 职场文书
2014国培学习感言
2014/03/05 职场文书
毕业生如何写自我鉴定
2014/03/15 职场文书
最新大学生创业计划书写作攻略
2014/04/02 职场文书
2014年学校工会工作总结
2014/12/06 职场文书
2014年科协工作总结
2014/12/09 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
班主任工作总结范文
2015/08/13 职场文书
Jupyter notebook 不自动弹出网页的解决方案
2021/05/21 Python
Vue监视数据的原理详解
2022/02/24 Vue.js