首页 > 编程语言 > 详细

我的python之路day13

时间:2018-06-19 13:08:30      阅读:205      评论:0      收藏:0      [点我收藏+]

迭代器和生成器

1.迭代器

  我们之前?直在?可迭代对象进?迭代操作. 那么到底什么是可迭代对象.?先我们先回顾?下?前我们所熟知的可迭代对象有哪些:

str, list, tuple, dict, set. 那为什么我们可以称他们为可迭代对象呢? 因为他们都遵循了可 迭代协议. 什么是可迭代协议. ?先我们先看?段错误代码:

技术分享图片

注意看报错信息中有这样?句话. ‘int‘ object is not iterable . 翻译过来就是整数类型对象 是不可迭代的. iterable表?可迭代的. 表?可迭代协议. 那么如何进?验证你的数据类型是否 符合可迭代协议. 我们可以通过dir函数来查看类中定义好的所有?法.

s = "我的哈哈哈"

print(dir(s))  # 可以打印对象中的?法和函数

print(dir(str))   # 也可以打印类中声明的?法和函数

技术分享图片

在打印结果中,找寻这个__iter__,如果能找到,那么这个类就是可迭代对象

我们发现这?个可以进?for循环的东?都有__iter__函数, 包括range也有. 可以??试? 下. 综上. 我们可以确定. 如果对象中有__iter__函数. 那么我们认为这个对象遵守了可迭代协议. 就可以进?迭代. 这?的__iter__是帮助我们获取到对象的迭代器. 我们使?__next__()来获取 到?个迭代器中的元素. 那么我们之前讲的for的?作原理到底是什么? 继续看代码

技术分享图片

我们可以把要迭代的内容当成?弹. 然后呢. 获取到迭代器__iter__(), 就把?弹都装在弹夹 中. 然后发射就是__next__()把每?个?弹(元素)打出来. 也就是说, for循环的时候. ?开始的 时候是__iter__()来获取迭代器. 后?每次获取元素都是通过__next__()来完成的. 当程序遇到 StopIteration将结束循环.

2.生成器

什么是?成器. ?成器实质就是迭代器.

在python中有三种?式来获取?成器:

1. 通过?成器函数

2. 通过各种推导式来实现?成器

3. 通过数据的转换也可以获取?成器

技术分享图片

这里需要普及一下yield和return的区别:

1.如果函数中包含了yield, 这个函数是一个生成器函数, 执行函数的时候是:生成器

2.生成器执行__next__(),执行到下一个yield

3.yield的作用和return基本相同,但是,只负责返回生成器

4.return,结束函数

技术分享图片

 

我的python之路day13

原文:https://www.cnblogs.com/ALADL/p/9197888.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!