简单了解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单元测试简单示例
Jul 03 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
Nov 30 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
Feb 18 Python
python-itchat 统计微信群、好友数量,及原始消息数据的实例
Feb 21 Python
在Python中使用MongoEngine操作数据库教程实例
Dec 03 Python
Python.append()与Python.expand()用法详解
Dec 18 Python
使用Python实现批量ping操作方法
May 06 Python
pycharm软件实现设置自动保存操作
Jun 08 Python
TensorFlow的环境配置与安装教程详解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5)
Jun 22 Python
基于pytorch中的Sequential用法说明
Jun 24 Python
Python中三维坐标空间绘制的实现
Sep 22 Python
搭建pypi私有仓库实现过程详解
Nov 25 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求两个文件的相对路径
2013/06/20 PHP
PHP设计模式之观察者模式实例
2016/02/22 PHP
jQuery 表单验证扩展(三)
2010/10/20 Javascript
Ajax搜索结果页面下方的分页按钮的生成
2012/04/05 Javascript
基于javascript 闭包基础分享
2013/07/10 Javascript
showModalDialog在谷歌浏览器下会返回Null的解决方法
2013/11/27 Javascript
jQuery实现列表的全选功能
2015/03/18 Javascript
详解JavaScript逻辑Not运算符
2015/12/04 Javascript
JS简单实现tab切换效果的多窗口显示功能
2016/09/07 Javascript
ES6中的rest参数与扩展运算符详解
2017/07/18 Javascript
JS获取input[file]的值并显示在页面的实现方法
2018/03/09 Javascript
浅谈React Event实现原理
2018/09/20 Javascript
Vue项目中最新用到的一些实用小技巧
2018/11/06 Javascript
Vue使用NProgress的操作过程解析
2019/10/10 Javascript
JS实现网站吸顶条
2020/01/08 Javascript
python数据清洗系列之字符串处理详解
2017/02/12 Python
Python实现返回数组中第i小元素的方法示例
2017/12/04 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
2018/02/03 Python
Python编写一个优美的下载器
2018/04/15 Python
python将字符串转换成json的方法小结
2019/07/09 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
2019/08/02 Python
python实现俄罗斯方块游戏(改进版)
2020/03/13 Python
python 两种方法删除空文件夹
2020/09/29 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的示例代码
2021/02/24 HTML / CSS
简历自荐信
2013/12/02 职场文书
法律进社区实施方案
2014/03/21 职场文书
法制宣传教育方案
2014/05/09 职场文书
关于运动会的广播稿
2014/09/22 职场文书
学生上课看漫画的检讨书
2014/09/26 职场文书
致800米运动员广播稿(10篇)
2014/10/17 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
信息技术研修心得体会
2016/01/08 职场文书
送给客户微信问候语!
2019/07/04 职场文书
基于JavaScript实现年月日三级联动
2021/06/22 Javascript
vue 实现弹窗关闭后刷新效果
2022/04/08 Vue.js
利用Python脚本写端口扫描器socket,python-nmap
2022/07/23 Python