简单了解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搭建Django应用程序步骤及版本冲突问题解决
Nov 19 Python
Python制作爬虫采集小说
Oct 25 Python
Python基于二分查找实现求整数平方根的方法
May 12 Python
Python使用numpy实现BP神经网络
Mar 10 Python
python3.7.0的安装步骤
Aug 27 Python
Pandas过滤dataframe中包含特定字符串的数据方法
Nov 07 Python
DRF跨域后端解决之django-cors-headers的使用
Jan 27 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
Sep 05 Python
Python3 selenium 实现QQ群接龙自动化功能
Apr 17 Python
python爬虫中PhantomJS加载页面的实例方法
Nov 12 Python
matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
Jan 05 Python
python实现高效的遗传算法
Apr 07 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
Syphon 使用方法
2021/03/03 冲泡冲煮
PHP生成数组再传给js的方法
2014/08/07 PHP
php备份数据库类分享
2015/04/14 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
Javascript - HTML的request类
2006/07/15 Javascript
创建一个复制UBB软件信息的链接或按钮的js代码
2008/01/06 Javascript
window.opener用法和用途实例介绍
2013/08/19 Javascript
键盘KeyCode值列表汇总
2013/11/26 Javascript
js实现简单div拖拽功能实例
2015/05/12 Javascript
浅谈js中用$(#ID)来作为选择器的问题(id重复的时候)
2017/02/14 Javascript
jQuery输入框密码的显示隐藏【代码分享】
2017/04/29 jQuery
微信小程序 本地图片按照屏幕尺寸处理
2017/08/04 Javascript
前端把html表格生成为excel表格的实例
2017/09/19 Javascript
jquery3和layui冲突导致使用layui.layer.full弹出全屏iframe窗口时高度152px问题
2019/05/12 jQuery
js计算两个时间差 天 时 分 秒 毫秒的代码
2019/05/21 Javascript
Layui实现数据表格默认全部显示(不要分页)
2019/10/26 Javascript
微信小程序仿抖音视频之整屏上下切换功能的实现代码
2020/05/24 Javascript
将Emacs打造成强大的Python代码编辑工具
2015/11/20 Python
对numpy下的轴交换transpose和swapaxes的示例解读
2019/06/26 Python
对python特殊函数 __call__()的使用详解
2019/07/02 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
python实现图片插入文字
2019/11/26 Python
keras实现theano和tensorflow训练的模型相互转换
2020/06/19 Python
python实现自动清理重复文件
2020/08/24 Python
卫校中专生个人自我评价
2013/09/19 职场文书
实习自我鉴定范文
2013/10/30 职场文书
高级工程师岗位职责
2013/12/15 职场文书
大学生思想汇报范文
2013/12/31 职场文书
大学生演讲稿范文
2014/01/11 职场文书
天鹅的故事教学反思
2014/02/04 职场文书
计算机网络工程专业职业生涯规划书
2014/03/10 职场文书
学校督导评估方案
2014/06/10 职场文书
组织生活会表态发言材料
2014/10/17 职场文书
走进科学观后感
2015/06/18 职场文书
《圆的面积》教学反思
2016/02/19 职场文书
大学生暑期实践报告之企业经营管理
2019/08/08 职场文书