简单了解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 25 Python
用Python将动态GIF图片倒放播放的方法
Nov 02 Python
Python编程生成随机用户名及密码的方法示例
May 05 Python
Python队列的定义与使用方法示例
Jun 24 Python
Python3 读、写Excel文件的操作方法
Oct 20 Python
python如何获取当前文件夹下所有文件名详解
Jan 25 Python
Python中将两个或多个list合成一个list的方法小结
May 12 Python
django 使用全局搜索功能的实例详解
Jul 18 Python
Python Django2 model 查询介绍(条件、范围、模糊查询)
Mar 16 Python
Python3合并两个有序数组代码实例
Aug 11 Python
Pycharm制作搞怪弹窗的实现代码
Feb 19 Python
python中的装饰器该如何使用
Jun 18 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
全国FM电台频率大全 - 17 湖北省
2020/03/11 无线电
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
2016/01/19 PHP
php 策略模式原理与应用深入理解
2019/09/25 PHP
在JavaScript中重写jQuery对象的方法实例教程
2014/08/25 Javascript
jQuery中odd选择器的定义和用法
2014/12/23 Javascript
js实现Select下拉框具有输入功能的方法
2015/02/06 Javascript
JS实现定时自动关闭DIV层提示框的方法
2015/05/11 Javascript
js小数运算出现多位小数如何解决
2015/10/08 Javascript
jquery获取点击控件的绝对位置简单实例
2016/10/13 Javascript
react-redux中connect()方法详细解析
2017/05/27 Javascript
jQuery实现可兼容IE6的滚动监听功能
2017/09/20 jQuery
webpack4+express+mongodb+vue实现增删改查的示例
2018/11/08 Javascript
使用electron制作满屏心特效的示例代码
2018/11/27 Javascript
js实现随机8位验证码
2020/07/24 Javascript
微信小程序实现左滑动删除效果
2020/03/30 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
2019/10/26 Javascript
Node.js操作MongoDB数据库实例分析
2020/01/19 Javascript
layui实现显示数据表格、搜索和修改功能示例
2020/06/03 Javascript
Python牛刀小试密码爆破
2011/02/03 Python
Python中文件操作简明介绍
2015/04/13 Python
python getopt详解及简单实例
2016/12/30 Python
对python .txt文件读取及数据处理方法总结
2018/04/23 Python
python excel使用xlutils类库实现追加写功能的方法
2018/05/02 Python
在Python中COM口的调用方法
2019/07/03 Python
django settings.py 配置文件及介绍
2019/07/15 Python
python 通过文件夹导入包的操作
2020/06/01 Python
CSS3 border-image详解、应用及jQuery插件
2011/08/29 HTML / CSS
HTML5实现移动端点击翻牌功能
2020/10/23 HTML / CSS
美国专业汽车音响和移动电子产品零售商:Car Toys
2019/05/13 全球购物
中职应届生会计求职信
2013/10/23 职场文书
酒店总经理欢迎词
2014/01/15 职场文书
警察先进个人事迹材料
2014/05/16 职场文书
幼儿园班级工作总结2015
2015/05/25 职场文书
小学教育见习总结
2015/06/23 职场文书
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python
CI Games宣布《堕落之王2》使用虚幻引擎5制作 预计将于2023年正式发售
2022/04/11 其他游戏