简单了解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访问纯真IP数据库的代码
May 19 Python
python完成FizzBuzzWhizz问题(拉勾网面试题)示例
May 05 Python
用Python的Django框架编写从Google Adsense中获得报表的应用
Apr 17 Python
在Python的Django框架中simple-todo工具的简单使用
May 30 Python
完美解决在oj中Python的循环输入问题
Jun 25 Python
对python内置map和six.moves.map的区别详解
Dec 19 Python
python3 cvs将数据读取为字典的方法
Dec 22 Python
Python动态语言与鸭子类型详解
Jul 01 Python
Django用户登录与注册系统的实现示例
Jun 03 Python
基于Tensorflow的MNIST手写数字识别分类
Jun 17 Python
python中print格式化输出的问题
Apr 16 Python
Python3.10的一些新特性原理分析
Sep 15 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 skymvc 一款轻量、简单的php
2011/06/28 PHP
php使用百度天气接口示例
2014/04/22 PHP
PHP解析html类库simple_html_dom的转码bug
2014/05/22 PHP
php常用字符串处理函数实例分析
2014/11/22 PHP
PHP获取不了React Native Fecth参数的解决办法
2016/08/26 PHP
thinkphp整合微信支付代码分享
2016/11/24 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
tp5.1 框架join方法用法实例分析
2020/05/26 PHP
Prototype使用指南之selector.js
2007/01/10 Javascript
js获得参数的getParameter使用示例
2014/02/26 Javascript
jQuery判断当前点击的是第几个li的代码
2014/09/26 Javascript
BootStrap网页中代码显示用法详解
2016/10/21 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
Angular4如何自定义首屏的加载动画详解
2017/07/26 Javascript
React Native AsyncStorage本地存储工具类
2017/10/24 Javascript
解决淘宝cnpm 安装后cnpm不是内部或外部命令的问题
2018/05/17 Javascript
vue轻量级框架无法获取到vue对象解决方法
2019/05/12 Javascript
layui table表格数据的新增,修改,删除,查询,双击获取行数据方式
2019/11/14 Javascript
vue绑定class的三种方法
2020/12/24 Vue.js
python从入门到精通(DAY 1)
2015/12/20 Python
使用Python生成随机密码的示例分享
2016/02/18 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
2017/04/11 Python
python对html过滤处理的方法
2018/10/21 Python
Python作用域与名字空间原理详解
2020/03/21 Python
html5教程实现Photoshop渐变色效果
2013/12/04 HTML / CSS
外贸业务员求职自荐信分享
2013/09/21 职场文书
升职自荐信
2013/11/28 职场文书
聚美优品的广告词
2014/03/14 职场文书
激励口号大全
2014/06/17 职场文书
涉及车辆房产分割的离婚协议书范文
2014/10/12 职场文书
付款证明格式范文
2015/06/19 职场文书
vue实现无缝轮播效果(跑马灯)
2021/05/14 Vue.js
聊聊Lombok中的@Builder注解使用教程
2021/11/17 Java/Android
js判断两个数组相等的5种方法
2022/05/06 Javascript
flex布局中使用flex-wrap实现换行的项目实践
2022/06/21 HTML / CSS
Python中的socket网络模块介绍
2022/07/23 Python