一,生成式和生成器

1,列表生成式

mylist = [ i*i  for i in range(3) if i>1 ]
print(mylist) 运行结果:[4]

  可以发现,快速生成列表的表达式,for循环range(3) ,如果i大于1,则乘以自己然后输出。

2,生成器

mygenerator = ( i*i for i in range(3))
print(mygenerator)
运行结果:<generator object <genexpr> at 0x000001FB08F18BA0>

 可以发现,这个生成器和列表生成式非常相似。只是上面的是[] 而下面的是()。

这让我想起了python2中的range与xrange2个函数。range是输出的是一个列表,而xrange生成的就是一个生成器。生成器需要是用for循环取值。

生成器的好处就是可以不用一次性将值存放到内存中,用的时候再去调用,这样可以节省内存。

二,yield(用于创建生成器)

yield 和 return 非常相似, return只能返回一个值,而yield可以输出多个值。yield也可以理解为具有记忆功能的return。

def fun1():
for i in range(1,5):
print(i) def fun2():
for i in range(1,5):
return i def fun3():
for i in range(1,5):
yield i

  

调用fun1()函数输出的是1,2,3,4,5

调用fun2()函数输出是1(执行到return就退出函数了)

调用fun3(0函数输出的是生成器,需要使用for循环取出来。

fun3函数和fun2函数对比,fun2函数只会返回1然后退出函数,而yield会在下次进入函数的时候知道自己已经输出过上一次的值了,所以它会return下一个值。本质上是执行next()函数(python2版本)

说明:yield创建的生成器是活的,再你使用for循环的时候是可以变更的。

python生成式和生成器的更多相关文章

  1. python 生成式和生成器

    #!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/10/17 21:46 # @Author : lijunjiang # @Fi ...

  2. python 生成式,生成器,迭代器,可迭代

    1.生成器就是迭代器2.生成式用[](中括号)包起来,生成器用()(圆括号)包起来3.生成式在使用前已经在内存中存在,生成器只有在使用时才生成4.迭代器是可以用.__next__()不断取出下一值,直 ...

  3. python学习笔记——列表生成式与生成器

    1.列表生成式(List Comprehensions) python中,列表生成式是用来创建列表的,相较于用循环实现更为简洁.举个例子,生成[1*1, 2*2, ... , 10*10],循环用三行 ...

  4. Python之列表生成式、生成器、可迭代对象与迭代器

    本节内容 语法糖的概念 列表生成式 生成器(Generator) 可迭代对象(Iterable) 迭代器(Iterator) Iterable.Iterator与Generator之间的关系 一.语法 ...

  5. 【转】Python之列表生成式、生成器、可迭代对象与迭代器

    [转]Python之列表生成式.生成器.可迭代对象与迭代器 本节内容 语法糖的概念 列表生成式 生成器(Generator) 可迭代对象(Iterable) 迭代器(Iterator) Iterabl ...

  6. python的高级特性:切片,迭代,列表生成式,生成器,迭代器

    python的高级特性:切片,迭代,列表生成式,生成器,迭代器 #演示切片 k="abcdefghijklmnopqrstuvwxyz" #取前5个元素 k[0:5] k[:5] ...

  7. python的列表生成式和生成器

    1.列表生成式是Python受欢迎的语法之一,通过一句简洁的语法就可以对一组元素进行过滤,还可以对得到的元素进行转换处理,语法格式为: [exp for val in collection if co ...

  8. 【Python】python内置函数、列表生成式、生成器

    一.内置函数 1 print(all([1,2,3,4]))#判断可迭代的对象里面的值是否都为真 2 print(any([0,1,2,3,4]))#判断可迭代的对象里面的值是否有一个为真 3 pri ...

  9. python 之 列表生成式、生成器表达式、模块导入

    5.16 列表生成式 l=[]for i in range(100):    l.append('egg%s' %i)print(l)​l=['egg%s' %i for i in range(100 ...

随机推荐

  1. 在自己网站中引入CU3ER/Flash 3D幻灯片效果和照片画框

    要求 必备知识 本文要求基本了解 JAVASCRIPT 和 XML基础语法知识. 运行环境 支持Flash Player的浏览器/Flash Player11及以上 演示地址 演示地址 下载地址   ...

  2. CentOS7安装sogou输入法

    centos7中自带的ibus用起来相当不爽,就决定自己换个搜狗,遇到阻力不少,在此记下,防止下次不会也给大家提供一些参考.(参见<kali下安装中文输入法>) 准备阶段: 安装fcitx ...

  3. Java之建造者模式(Builder Pattern)(转)

    1.概念 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. [构建与表示分离,同构建不同表示] 与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者 ...

  4. es-08-hadoop集成

    1, 版本匹配: https://www.elastic.co/guide/en/elasticsearch/hadoop/current/requirements.html 2, maven集成: ...

  5. WPF备忘录(2)WPF获取和设置鼠标位置与progressbar的使用方法

    一.WPF 中获取和设置鼠标位置 方法一:WPF方法 Point p = Mouse.GetPosition(e.Source as FrameworkElement); Point p = (e.S ...

  6. $.each()和$(selector).each()

    转载:http://www.jb51.net/article/65215.htm $.each()与$(selector).each()不同, 后者专用于jquery对象的遍历, 前者可用于遍历任何的 ...

  7. 彻底理解voliate

    1.voliate简介 在上一篇文章中我们深入理解了java关键字synchronized,我们知道在java中还有一大神器就是关键volatile,可以说是和synchronized各领风骚,其中奥 ...

  8. 【14】代理模式(Proxy Pattern)

    一.引言 在软件开发过程中,有些对象有时候会由于网络或其他的障碍,以至于不能够或者不能直接访问到这些对象,如果直接访问对象给系统带来不必要的复杂性.这时候可以在客户端和目标对象之间增加一层中间层,让代 ...

  9. HDU4292(KB11-H 最大流)

    Food Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  10. git中的ssh和https方式的使用(gitee为例)

    在使用git管理代码,或者使用github,国内的码云(gitee)的时候,有两种方式可以使用,分别是https和ssh,以下均使用gitee为例. ssh方式 配置ssh,如果不配置ssh的话,cl ...