简单了解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 05 Python
python实现八大排序算法(1)
Sep 14 Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
Jan 11 Python
numpy中实现二维数组按照某列、某行排序的方法
Apr 04 Python
Python可变参数*args和**kwargs用法实例小结
Apr 27 Python
redis之django-redis的简单缓存使用
Jun 07 Python
在django中实现页面倒数几秒后自动跳转的例子
Aug 16 Python
Django实现文件上传下载
Oct 06 Python
如何在Python 游戏中模拟引力
Mar 27 Python
Python基于pyecharts实现关联图绘制
Mar 27 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
Apr 08 Python
Django模型层实现多表关系创建和多表操作
Jul 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
PHP+MYSQL的文章管理系统(二)
2006/10/09 PHP
ThinkPHP自动填充实现无限级分类的方法
2014/08/22 PHP
浅析Yii2集成富文本编辑器redactor实例教程
2016/04/25 PHP
jquery使整个div区域可以点击的方法
2015/06/24 Javascript
深入浅析Bootstrap列表组组件
2016/05/03 Javascript
详解angular2实现ng2-router 路由和嵌套路由
2017/03/24 Javascript
关于javascript作用域的常见面试题分享
2017/06/18 Javascript
Vue.js实现按钮的动态绑定效果及实现代码
2017/08/21 Javascript
angularJS的radio实现单项二选一的使用方法
2018/02/28 Javascript
vue+element-ui+ajax实现一个表格的实例
2018/03/09 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
jQuery Raty星级评分插件使用方法实例分析
2019/11/25 jQuery
vant picker+popup 自定义三级联动案例
2020/11/04 Javascript
[06:16]DOTA2守卫传承者——职业选手谈心路历程
2015/02/26 DOTA
在Python中处理字符串之isdecimal()方法的使用
2015/05/20 Python
PYTHON压平嵌套列表的简单实现
2016/06/08 Python
python计算两个数的百分比方法
2018/06/29 Python
如何用Python做一个微信机器人自动拉群
2019/07/03 Python
pyenv与virtualenv安装实现python多版本多项目管理
2019/08/17 Python
Django之路由层的实现
2019/09/09 Python
Pandas 缺失数据处理的实现
2019/11/04 Python
Python FtpLib模块应用操作详解
2019/12/12 Python
Spartoo英国:欧洲最大的网上鞋店
2016/09/13 全球购物
EMPHASIS艾斐诗官网:周生生旗下原创精品珠宝品牌
2020/12/17 全球购物
Linux内核产生并发的原因
2012/07/13 面试题
HR喜欢的自荐信格式
2013/10/08 职场文书
大学生求职简历的自我评价
2013/10/14 职场文书
劳资员岗位职责
2013/11/11 职场文书
人力资源管理系自荐信
2014/05/31 职场文书
乡镇保密工作责任书
2014/07/28 职场文书
幼儿园教师节演讲稿
2014/09/03 职场文书
“三支一扶”支教教师思想汇报
2014/09/13 职场文书
后备干部推荐材料
2014/12/24 职场文书
2016十一国庆节感言
2015/12/09 职场文书
2019生态环境保护倡议书!
2019/07/03 职场文书
Python常遇到的错误和异常
2021/11/02 Python