简单了解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发送各种形式的邮件的方法汇总
Nov 09 Python
Python中绑定与未绑定的类方法用法分析
Apr 29 Python
Python字典数据对象拆分的简单实现方法
Dec 05 Python
python利用requests库模拟post请求时json的使用教程
Dec 07 Python
使用Python轻松完成垃圾分类(基于图像识别)
Jul 09 Python
python实现两个文件夹的同步
Aug 29 Python
python 发送json数据操作实例分析
Oct 15 Python
Python input函数使用实例解析
Nov 22 Python
python 实现二维列表转置
Dec 02 Python
python enumerate内置函数用法总结
Jan 07 Python
Python图像阈值化处理及算法比对实例解析
Jun 19 Python
Pycharm自动添加文件头注释和函数注释参数的方法
Oct 23 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中url函数介绍及使用示例
2014/02/13 PHP
laravel-admin 中列表筛选方法
2019/10/03 PHP
PHP数组对象与Json转换操作实例分析
2019/10/22 PHP
window.event.keyCode兼容IE和Firefox实现js代码
2013/05/30 Javascript
jQuery动态改变图片显示大小(修改版)的实现思路及代码
2013/12/24 Javascript
jquery ajax跨域解决方法(json方式)
2014/02/04 Javascript
JavaScript对象学习小结
2015/09/02 Javascript
AngularJS入门教程引导程序
2016/08/18 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
浅析JavaScript动画模拟拖拽原理
2016/12/09 Javascript
ES6新特性:使用export和import实现模块化详解
2017/07/31 Javascript
vue组件的写法汇总
2018/04/12 Javascript
jQuery实现轮播图及其原理详解
2020/04/12 jQuery
echarts多条折线图动态分层的实现方法
2019/05/24 Javascript
[03:24]CDEC.Y赛前采访 努力备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
tensorflow获取变量维度信息
2018/03/10 Python
numpy的文件存储.npy .npz 文件详解
2018/07/09 Python
pyqt5之将textBrowser的内容写入txt文档的方法
2019/06/21 Python
python画图的函数用法以及技巧
2019/06/28 Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
2019/09/16 Python
python实现计算器功能
2019/10/31 Python
python读取多层嵌套文件夹中的文件实例
2020/02/27 Python
Python常用数字处理基本操作汇总
2020/09/10 Python
美国顶级防滑鞋:Shoes For Crews
2017/03/27 全球购物
Book Depository澳大利亚:世界领先的专业在线书店之一
2018/12/27 全球购物
小米官方旗舰店:Xiaomi
2020/08/07 全球购物
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/11/24 面试题
行政助理岗位职责
2013/11/10 职场文书
会计实习自我鉴定
2013/12/04 职场文书
中专生职业生涯规划书范文
2014/01/10 职场文书
函授大学生自我鉴定
2014/02/05 职场文书
校运会广播稿
2015/08/19 职场文书
年终工作总结范文
2019/06/20 职场文书
学者《孟子》名人名言
2019/08/09 职场文书
GTX1660显卡搭配显示器推荐
2022/04/19 数码科技
css3 选择器
2022/05/11 HTML / CSS