概述
- 序列可以迭代的原因:iter函数,解释器需要迭代对象时,自动执行iter()。检查是否有
__iter__
,有则调用它并返回一个迭代器;没有__iter__
但有__getitem__
,python创建一个迭代器,并尝试按索引获取元素;若失败则抛出异常。 - 只实现了
__getitem__
的类型也是可迭代的但是不能用isinstance(obj, abc.Iterable)
和issubclass(cls, abc.Iterable)
判断,此时都为Fasle。判断对象是否可迭代准确的是用iter(obj),观察是否抛出TypeError。 - 迭代器: 迭代器是这样的对象:实现了无参数的
__next__
方法,返回序列中的下一个元素;如果没有元素了,那么抛出 StopIteration 异常。Python 中的迭代器还实现了__iter__
方法返回迭代器本身,因此迭代器也可以迭代。 - 迭代器模式
- 生成器和yield
- itertools中的生成器函数,count,takewhile等
- dropwhile判断前n个是否符合,若符合则一直跳过,直到第一个不符合的,就产出,并产出之后的。(若第一个就不符合,则产出所有)
- compress同时比较2个可迭代对象,同位置元素若第二个为真则产出,最终结果的长度是先终止的可迭代对象(或者不终止)。
- filterfalse和filter
- islice切片
- accumulate无参数计算和,有参数时传入2个元素并产出计算结果并与之和后一个元素计算,以此类推。
- starmap
- chain,chain.from_iterable
- product笛卡儿积
- zip和zip_longest(fillvalue填充缺失元素)
- combinations 组合和combinations_with_replacement 元素可重复组合
- cycle 无限循环输出传入的iterable,惰性的,若改变了传入的iterable,cycle输出可能会改变,其中各个元素是浅复制。
- permutations排列
- repeat重复times次
- groupby分组根据key
- tee返回多个生成器
- iter()函数第二个参数为哨兵,可在哨兵处终止。
- iter(iterable); iter(callable, sentinel) 两种方式
- 在所有情况下,如果异常或者 return、break 或 continue 语句导致
控制权跳到了复合语句的主块之外,else 子句也会被跳过。 - 在loop中的if/else 利用continue可以跳过else
- 利用
__enter__
和__exit__
构建上下文管理器。 - 注意区分上下文管理器和
__enter__
方法返回的对象。 - 上下文管理器可用于,事物,锁,条件,信号,Decimal 对象的算术运算设置环境,测试临时给对象打补丁等场景。
- 利用yield和@contextmanager创建上下文管理器(需要注意异常处理)
- 协程异常处理.throw()和关闭.close() 麻烦
- 协程中return然后在异常的value中获取返回值
- yield from
- 33.
最后
以上就是专一心情为你收集整理的Fluent Python笔记三的全部内容,希望文章能够帮你解决Fluent Python笔记三所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复