目录:

一、列表生成器

二、生成器

三、迭代器

一、列表生成器

a = [x for x in range(10)]

b= [y*2 for y in range(10)]

def f(n)
return n*n*n c = [f(z) for z in range(10)]

列表生成器会将所有的内容加载到内存中,在生成大量的数据时,会占用内存

生成器只会生成一个  generator object   ,占用很少内存,只会在调用时才产生值。且只能按顺序取值

二、生成器

1、基础代码

b = (x for x in range(10))
print(b) print(next(b)) # 等价于 b.__next__() 等价于python2中的b.next()
print(b.__next__()) for i in b:
print(i) '''output
<generator object <genexpr> at 0x000002900B1BB308>
0
1
2
3
4
5
6
7
8
9
'''

2、两种生成方式

①   (x for x in range(10))

②  yield方式

第②种代码

def foo():
print("ok")
yield 1 print("fine")
yield g = foo()
print(g) # next(g)
# aa = next(g)
# print(aa) for i in g:
print(i)

遇到函数中有  yield   则该函数为生成器

一个yield是一个生成器的生成物的结点,它会返回yield 后面的内容,然后结束,直到下一个next的调用

3、send()方法

def bar():
c = yield 0
print(c)
print("ok1")
count = yield 1 print(count)
print("ok2")
yield 2 g = bar()
print(g) # print(next(g))
print(g.send('ccc')) # TypeError: can't send non-None value to a just-started generator print(g.send("qqqq"))

send()方法与next()方法类似,但可以向生成器中传值,用于一些交互场景,但在第一个send()前如果没有next(),只能传一个send(None),否则会出现  TypeError: can't send non-None value to a just-started generator

三、迭代器

参考博客:Python之路,Day4 - Python基础4 (new版)

      Py西游攻关之迭代器&生成器

什么是迭代器?

满足两个条件:①有iter方法  ②有next方法

区别迭代器与可迭代对象

from collections import Iterator,Iterable

l = [1, 2, 3]

print(isinstance(l,list))
print(isinstance(l,Iterator)) # False 不是迭代器
print(isinstance(l,Iterable)) # True 是可迭代对象 for i in l:
print(i)

最新文章

  1. Android开发案例 - 注册登录
  2. Deep learning:四十六(DropConnect简单理解)
  3. C#winform中使用控件的Dock属性进行布局
  4. mysql如何给汉字按照首字母顺序排序
  5. js时间字符串转Date对象
  6. crtmpserver组网方案
  7. 利用朴素贝叶斯算法进行分类-Java代码实现
  8. 克隆虚拟机系统整个文件快照,然后另起建立该系统,产生的IP地址冲突解决办法
  9. Java自学能学会吗?最新Java高级学习路线
  10. 详解EBS接口开发之应收款处理
  11. 2019年最受欢迎IMX6系列开发板,资料全开源,助力产品研发不在话下
  12. pt-table-checksum 使用方法【转】
  13. windows server 2008 R2安装图片浏览器/照片查看器方法
  14. [No000012A]WPF(2/7):布局,容器和布局转换[译]
  15. Spark学习之路 (七)Spark 运行流程
  16. learning ddr init power-up initialization sequence
  17. Redis-4.0.11集群配置
  18. Spring 4 官方文档学习(十)数据访问之JDBC
  19. 学号20145322 《Java程序设计》第一周学习总结
  20. 二十六、关于 IntelliJ IDEA 中 Schedule for Addition 的问题

热门文章

  1. C++ 虚函数的缺省參数问题
  2. [JZOJ NOIP2018模拟10.20 A组]
  3. Android setImageResource与setImageBitmap的区别
  4. 3ds Max实例教程:制作雪的材质
  5. 洛谷P2617 Dynamic Rankings 主席树 单点修改 区间查询第 K 大
  6. Hadoop2.x 关于日志文件位置
  7. 关于vue事件监听的一个问题
  8. #undef 的用法
  9. 普通码农和CTO之间的差距
  10. How to enable wire logging for a java HttpURLConnection traffic?