一,生成式和生成器

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. 【转】谷歌三大核心技术(三)Google BigTable中文版

      谷歌三大核心技术(三)Google BigTable中文版 摘要 Bigtable 是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的PB级的数据.Goo ...

  2. TCP滑动窗口

    TCP利用滑动窗口实现流量控制基本的数据单位不是数据段,而是字节 滑动窗口本质上是描述接受方(本地)的TCP数据报缓冲区大小的数据,发送方根据这个数据来计算自己最多能发送多长的数据.如果发送方收到接受 ...

  3. DataSet 多表关系

    protected void Page_Load(object sender, EventArgs e) { string connectionString = @"Data Source= ...

  4. PTA (Advanced Level) 1008 Elevator

    Elevator The highest building in our city has only one elevator. A request list is made up with Npos ...

  5. Maven Jetty9

    <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactI ...

  6. webpack与gulp的区别

    gulp是工具链.构建工具,可以配合各种插件做js压缩,css压缩,less编译 替代手工实现自动化工作 1.构建工具 2.自动化 3.提高效率用 webpack是文件打包工具,可以把项目的各种js. ...

  7. Vistual Studio 2010(VS2010)安装 MVC3.0具体方法

    本文内容部分摘自园子里其他博主的内容,感谢他们的探索和分享,谢谢!本文主要方便自己记录自己的学习和操作过程,同时也希望能够通过搜索引擎通过不同的关键字分享该文章,以方便更多的同学. PS:VS2010 ...

  8. C++ 小知识点 WINAPI

    int WINAPI WINMain 中,WINAPI含义 网友给出回答:在windef.h头文件中有如下定义#define WINAPI      __stdcall#define APIENTRY ...

  9. 提供PPT嵌入Winform/WPF解决方案,Winform/WPF 中嵌入 office ppt 解决方案

    Winform/WPF 中嵌入 office ppt(powerpoint)解决方案示: 1. 在winform中操作ppt,翻页.播放.退出:显示 总页数.当前播放页数 2. 启动播放ppt时录制视 ...

  10. IDE MAC下的快捷键,自定义代码块。

    快捷键 参考博客:http://blog.csdn.net/iguiyi/article/details/51853728 alt+f7查找在哪里使用 相当于eclipse的ctrl+shift+G ...