简单了解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 07 Python
在Python下使用Txt2Html实现网页过滤代理的教程
Apr 11 Python
pygame学习笔记(3):运动速率、时间、事件、文字
Apr 15 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
Apr 10 Python
Python操作Sql Server 2008数据库的方法详解
May 17 Python
介绍一款python类型检查工具pyright(推荐)
Jul 03 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
Oct 12 Python
关于Python-faker的函数效果一览
Nov 28 Python
python+gdal+遥感图像拼接(mosaic)的实例
Mar 10 Python
Python 跨.py文件调用自定义函数说明
Jun 01 Python
python Selenium 库的使用技巧
Oct 16 Python
教你如何使用Python开发一个钉钉群应答机器人
Jun 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 函数语法介绍一
2009/06/14 PHP
php 目录与文件处理-郑阿奇(续)
2011/07/04 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
2013/06/06 PHP
有关于PHP中常见数据类型的汇总分享
2014/01/06 PHP
PHP中的gzcompress、gzdeflate、gzencode函数详解
2014/07/29 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
PHP 出现 http500 错误的解决方法
2021/03/09 PHP
Nigma vs AM BO3 第二场2.13
2021/03/10 DOTA
JavaScript 使用技巧精萃(.net html
2009/04/25 Javascript
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
利用JS解决ie6不支持max-width,max-height问题的方法
2014/01/02 Javascript
jQuery EasyUI datagrid实现本地分页的方法
2015/02/13 Javascript
javascript验证内容为数字以及长度为10的简单实例
2016/08/20 Javascript
es6学习笔记之Async函数基本教程
2017/05/11 Javascript
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
2017/06/17 Javascript
JavaScript模拟文件拖选框样式v1.0的实例
2017/08/04 Javascript
React中jquery引用的实现方法
2017/09/12 jQuery
剖析Angular Component的源码示例
2018/03/23 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
2020/04/03 Javascript
koa中间件核心(koa-compose)源码解读分析
2020/06/15 Javascript
[52:05]EG vs OG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python检测某个变量是否有定义的方法
2015/05/20 Python
Python @property原理解析和用法实例
2020/02/11 Python
通过python检测字符串的字母
2020/02/18 Python
python实现读取类别频数数据画水平条形图案例
2020/04/24 Python
启动一个线程是用run()还是start()
2016/12/25 面试题
婚前保证书
2014/04/29 职场文书
感恩节活动策划方案
2014/05/16 职场文书
2014迎国庆演讲稿
2014/09/19 职场文书
工艺技术员岗位职责
2015/02/04 职场文书
推广普通话的宣传语
2015/07/13 职场文书
python自动计算图像数据集的RGB均值
2021/06/18 Python
Redis+Lua脚本实现计数器接口防刷功能(升级版)
2022/02/12 Redis