博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python的容器、生成器、迭代器、可迭代对象的家谱
阅读量:5291 次
发布时间:2019-06-14

本文共 1011 字,大约阅读时间需要 3 分钟。

前言


之前虽然写Python,但是对Python的这些概念也是模模糊糊,知道有一天,看到了一篇文章,讲的透彻,所以就写这篇作为对于这篇高文的读书笔记吧

致谢,该文作者,

总论


总论:可迭代对象概念最大,包含迭代器和大部分容器,以及例如files、sockets等可以迭代的对象。

容器:    list、dequeue、set、dict、Counter、tuple、str等等,注意Bloom filter容器不能迭代,所以不是所有容器都可以迭代的。
迭代器:    概念比较复杂,基本上就是实现了__iter__()和__next__()两个方法的对象,当没有下一个元素的时候跑出StopIteration异常。    所以所有的生成器都是迭代器,这里的生成器包括生成器推导式,和生成器函数。
生成器:    特殊又优雅的迭代器,函数体没有return内容(实际上,在循环中return 本身类似于break的功能,但是不能 return xxx);    可以节省CPU和内存。生成器表达式:    与列表推导式的差别    [x for x in y if x > z] -> 列表推导式    (x for x in y if x > z) -> 生成器表达式

然后我们来重点学习一下生成器吧:

生成器


yield 来代替return 临时转移程序控制权,yield 暂时把当下的值返回给编程者,但是保留了函数运行状态,而不是像return 那样直接结束了自身函数的调用。

例如我们来处理一个大文件

def readBigFile(filename):    with open(filename,"r") as fread:        while True:            try:                line = fread.readline()            except Exception(reason):                raise            if line != "" and line != None:                yield line            else:                break

转载于:https://www.cnblogs.com/KevinGeorge/p/9176991.html

你可能感兴趣的文章
python使用easyinstall安装xlrd、xlwt、pandas等功能模块的方法
查看>>
CS0103: The name ‘Scripts’ does not exist in the current context解决方法
查看>>
20130330java基础学习笔记-语句_for循环嵌套练习2
查看>>
Spring面试题
查看>>
窥视SP2010--第一章节--SP2010开发者路线图
查看>>
MVC,MVP 和 MVVM 的图示,区别
查看>>
C语言栈的实现
查看>>
代码为什么需要重构
查看>>
TC SRM 593 DIV1 250
查看>>
SRM 628 DIV2
查看>>
2018-2019-2 20165314『网络对抗技术』Exp5:MSF基础应用
查看>>
统计单词,字符,和行
查看>>
jQuery垂直滑动切换焦点图
查看>>
Python-S9-Day127-Scrapy爬虫框架2
查看>>
模运算
查看>>
python多线程的使用
查看>>
团队编程项目作业1-成员简介及分工
查看>>
使用Chrome(PC)调试移动设备上的网页
查看>>
UI基础--手写代码实现汤姆猫动画
查看>>
使用gitbash来链接mysql
查看>>