1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 大牛初学python笔记(迭代器 生成器 三元表达式 列表解析)

大牛初学python笔记(迭代器 生成器 三元表达式 列表解析)

时间:2019-07-24 03:33:46

相关推荐

大牛初学python笔记(迭代器 生成器 三元表达式 列表解析)

可迭代对象是我们非常熟悉的一个名词,之前也简单介绍过能被for循环的,就是可迭代对象,但其实,里面的水更深。

迭代器与for循环的关系

1.迭代器协议:

对象必须体统一个next方法,执行该方法要么返回迭代中的下一项,要么引起一个StopIteration异常,以终止迭代(只能往后走,不能往前退)

2.可迭代对象:

实现了迭代器协议的对象

3.for循环的本质:

先将对象变为可迭代对象,再循环所有对象,全都是使用迭代器协议,一次一次得调用协议中的next方法

注意:

字符串、列表、元组、字典、集合、文件对象都不是可迭代对象,它们根本不存在next方法,只不过在for循环时,调用了它们内部的__iter__方法,把它们变成了可迭代对象

4.强大的for循环机制:

基于迭代器协议提供一个统一的可以遍历所有对象的方法,不管是有序的列表、字符串、元组,还是无序的集合、字典、文件,都可以通过for循环来遍历

5.迭代器如何工作的:

运行结果:

w

o

r

l

d

将字符串中的字符一个一个全部输出了

6.while循环模拟for循环与迭代器的结合:

运行结果:

w

o

r

l

d

迭代完毕了,循环终止了

7.用内置函数next()取值可迭代对象:

运行结果:

may

you

be

happy

生成器

1.通过以上的分析就可以看出,遵循迭代器协议的对象就是可迭代对象,这个可迭代对象就是迭代器

2.生成器: 自动实现可迭代协议的一种数据类型,这类数据默认已经iter过了,因此默认存在__next__方法

3.生成器函数:

函数的返回值用yield而不是用return,这样返回的数据就是一个生成器,默认的可迭代对象,拥有__next__方法

三元表达式

运行结果:

骗子

列表解析与生成器表达式:

普通赋值:

运行结果:

[‘鸡蛋0’, ‘鸡蛋1’, ‘鸡蛋2’, ‘鸡蛋3’, ‘鸡蛋4’, ‘鸡蛋5’, ‘鸡蛋6’, ‘鸡蛋7’, ‘鸡蛋8’, ‘鸡蛋9’]

列表解析(快速赋值):

甚至可以这样:

但是要注意。不存在四元表达式,所有不能:

egg = ["鸡蛋%s"%i for i in range(10) if i>=5 else i]

生成器表达式:

运行结果:

鸡0

鸡1

鸡2

鸡3

总结:列表解析与生成器表达式都是一种便利的编程方式,不过生成器表达式更节省内存,因为它是基于迭代器协议一个一个取值的,以上就是本文的全部内容,希望对大家的学习有所帮助!!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。