列表生成式

列表生成式的操作顺序:

1、先依次来读取元素 for x

2、对元素进行操作 x*x

3、赋予变量

Eg.列表生成式方式一

a = [x*x for x in range(10)]
print(a)
>>>[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Eg.列表生成式方式二

def f(n):
return n*n
a = [f(x) for x in range(10)]
print(a)
>>>[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

生成器

定义生成器可以使用yield关键词。在Python中,它作为一个关键词,是生成器的标志

生成器一共有两种创建方式:

方式1:s=(x*x for x in range(n)) -----n为整数

s=(x*x for x in range(5))
print(s)
>>> at 0x00000152A77E0DB0> # 创建出一个生成器对象
print(next(s)) # 等价于s.__next()__在python2 中: s.next()
print(next(s))
for i in s:
print(i)
>>> 0
1
4
9
16

方式2:生成器对象 yield 存在

def f():
print('Hello')
yield 1 # 类似于 return 的作用
print('World!')
yield 2
b=f()
print(b)
# next(b) # 在运行到了第一个 yield 后,函数会停止并暂时地挂起
# next(b) # 当第二次执行next()时,生成器会从yield 1,上一次的工作状态开始工作继续
for i in b:
print(i)
>>>Hello
1
World!
2

迭代器

迭代器需要满足两个条件:

1、有 iter 方法

2、有 next 方法

Eg.创建迭代器的方式

from collections import Iterator,Iterable
l = [1,2,3,4,5]
a = iter(l) #l.__iter__() 通过iter()函数来获得一个Iterator对象
print(a)
print(next(a))
print(next(a))
>>><list_iterator object at 0x0000023A7CE027B8>
1
2

(一) send()方法

send拥有next的功能,但除此之外send可以在yield处传递参数并在生成器里接收,因为第一次send时并没有在yield处开始,所以没有变量来接收参数,所以可以使用g.send(None)来进行第一

次,或者使用next()

生成器中也可以这样使用

def f():
print('Hello')
print('World!')
yield 1 # 类似于 return 的作用
print('Bye!')
yield 2
b=f()
b.send(None)
b.send(1)
>>>Hello
World!
Bye!

(二)isinstance()方法

可以使用isinstance()来判断一个对象是否是Iterator对象

from collections import Iterator,Iterable
l = [1,2,3,4,5]
a = iter(l) #l.__iter__()
print(isinstance(l,list)) # 判断 l 是不是list类型
print(isinstance(l,Iterable)) # 判断 l 是不是Iterable对象
print(isinstance(l,Iterator)) # 判断 l 是不是迭代器
>>>True
True
False

注意:

其实生成器就是迭代器,但是迭代器不一定是生成器

字符串、元组、列表、集合、字典都是可迭代对象(Iterable)

可以通过iter()函数来获得一个Iterator对象

最新文章

  1. linux安装VMware-tools,
  2. js简单操作Cookie
  3. 微信支付JsAPI
  4. Hammer.js--转载自李林峰的园子
  5. TI Zigbee Light Link 参考设计
  6. MyEclipse中无法识别 sun.misc.BASE64Encoder
  7. 网站中集成jquery.imgareaselect实现图片的本地预览和选择截取
  8. 在word里插入图片,并设置图片的格式
  9. MATLAB importdata函数返回值类型
  10. 十五、C# 使用查询表达式的LINQ
  11. 关于微信分享JSSDK使用需注意的几点问题
  12. Ubuntu &amp; GitLab CI &amp; Docker &amp; ASP.NET Core 2.0 自动化发布和部署(2)
  13. 【一天一道LeetCode】#28. Implement strStr()
  14. robot framework之弹出窗口的处理关键字实战
  15. mysql复习
  16. node爬虫扒小说
  17. Perfmon - Windows 自带系统监测工具(转)
  18. 查看django版本的方法
  19. Eclipse C++,Cygwin 64,gcov,lcov 单体&amp;覆盖率测试环境搭建笔记
  20. linux下yum错误:[Errno 14] problem making ssl connection Trying other mirror.

热门文章

  1. python多进程与协程
  2. 移动端fixed的元素抖动的问题
  3. January 24 2017 Week 4 Tuesday
  4. 【转】[C++]实现委托模型
  5. System IPC 与Posix IPC(msg消息对列)
  6. Windows Server 2012/2012 R2:安装和配置 SMTP 服务器
  7. JavaScript的DOM_获取和操作层次节点
  8. Codeforces Round #433 (Div. 2)【A、B、C、D题】
  9. Android(java)学习笔记210:Android线程形态之 IntentService
  10. T-sql中的三种分页查询