简单了解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 相关文章推荐
使用C语言扩展Python程序的简单入门指引
Apr 14 Python
Python中第三方库Requests库的高级用法详解
Mar 12 Python
python在非root权限下的安装方法
Jan 23 Python
从运行效率与开发效率比较Python和C++
Dec 14 Python
python 根据时间来生成唯一的字符串方法
Jan 14 Python
Django框架安装方法图文详解
Nov 04 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
Feb 23 Python
Python绘制全球疫情变化地图的实例代码
Apr 20 Python
Python Pandas 对列/行进行选择,增加,删除操作
May 17 Python
python使用多线程+socket实现端口扫描
May 28 Python
Python 图片处理库exifread详解
Feb 25 Python
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
May 14 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
smarty简单分页的实现方法
2014/10/27 PHP
PHP下载远程文件到本地存储的方法
2015/03/24 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
2016/03/22 PHP
最新最全PHP生成制作验证码代码详解(推荐)
2016/06/12 PHP
Yii框架弹出窗口组件CJuiDialog用法分析
2017/01/07 PHP
php intval函数用法总结
2019/04/14 PHP
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
javascript数字格式化通用类 accounting.js使用
2012/08/24 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
jquery实现弹出层完美居中效果
2014/03/03 Javascript
seajs中模块的解析规则详解和模块使用总结
2014/03/12 Javascript
仿百度联盟对联广告实现代码
2014/08/30 Javascript
AngularJS模块管理问题的非常规处理方法
2015/04/29 Javascript
Javascript实现跑马灯效果的简单实例
2016/05/31 Javascript
浅谈EasyUI常用控件的禁用方法
2016/11/09 Javascript
网络传输协议(http协议)
2016/11/18 Javascript
js初始化验证实例详解
2016/11/26 Javascript
关于Vue单页面骨架屏实践记录
2017/12/13 Javascript
一些可能会用到的Node.js面试题
2019/06/15 Javascript
express中static中间件的具体使用方法
2019/10/17 Javascript
pandas通过loc生成新的列方法
2018/11/28 Python
利用python求积分的实例
2019/07/03 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
2019/10/24 Python
python实现五子棋游戏(pygame版)
2020/01/19 Python
python+Selenium自动化测试——输入,点击操作
2020/03/06 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
2020/07/03 Python
学习Python爬虫的几点建议
2020/08/05 Python
CSS3实现渐变背景兼容问题
2020/05/06 HTML / CSS
CSMA/CD介质访问控制协议
2015/11/17 面试题
职业技术学校毕业生推荐信
2013/12/03 职场文书
自我推荐书
2013/12/04 职场文书
副主任竞聘演讲稿
2014/08/18 职场文书
暖春观后感
2015/06/08 职场文书
运动会口号霸气押韵
2015/12/24 职场文书
Nginx内网单机反向代理的实现
2021/11/07 Servers
24年收藏2000多部退役军用电台
2022/02/18 无线电