python学习手册笔记——20.迭代和解析
00.由于python编程中的一种常见任务,Python最终产生了一种新的表达式——列表解析,它甚至比我们前面学习的工具更灵活。简而言之,列表解析把任一一个表达式而不是一个函数应用于一个迭代对象中的元素。
01.列表解析在一个序列的值上应用一个任一表达式,将其结果收集到一个新的列表中并返回。
02.实现代码的精简于代码的可读性相比,就没有那么重要了。
03.Python3.0中的map和列表解析的最大区别式:map式一个迭代器,根据需求产生结果:为了同样地实现内存节省,列表解析必须编码为生成器表达式。
04.生成器函数和常规函数一样,并且,实际上也是用常规的def语句编写的。
状态挂起:和返回一个值并退出的常规函数不同,生成器函数自动在生成值得时候挂起并继续函数得执行。由于生成器函数在挂起时保存得状态包含他们得整个本地作用域,当函数恢复时,他们得本地变量保持了信息并使器可用。
05.生成器函数和常规函数之间得主要得代码不同指出在于,生成器yields一个值,而不是返回一个值。yield语句挂起该函数并向调用者发送回一个值,但是,保留足够的状态以使得函数能够从它离开的地方继续。
06.生成器函数协议中增加了一个send的方法。send方法生成一系列结果的下一个元素,这一点就像__next__方法一样,但使它也提供了一种调用者于生成器之间进行通信的方法,从而能够影响它的操作。
07.集合解析和字典解析:
*对于集合,新的常量形式{1,3,2}等同于set([1,3,2]),并且新的集合解析语法{f(x) for x in S if P(x)}就像使生成器表达式set(f(x) for x in S if P(x)),其中f(x)是一个任意的表达式
*对于字典,新的字典解析语法{key: val for (key, val) in zip(keys, vals)}像dict(zip(keys, vals)形式一样工作,并且{x:f(x) for x in items}像生成器表达式dict((x, f(x)) for x in items)一样工作。
08.和列表解析一样,集合解析和字典解析也可以在任何类型的可迭代对象上迭代——列表、字符串、文件、范围以及支持迭代协议的任何其他类型。
09.