'''
异常处理
try:
except:
finally:
with:
raise
可迭代对象
只要重写了__iter__方法,就是一个可迭代对象
迭代器:
迭代器就是用来迭代取值的,对于序列类型,我们可以使用序号来进行跌打取值
对于非序列类型,我们需要一种不依赖序号的方式来进行迭代取值,因此使用迭代器
迭代器统一了迭代取值的方式
迭代的目的就是不断逼近目标值
class xxx:
def __iter__():
return self
for in 方法就是调用对象的__iter__方法,获取一个可迭代对象,然后不停调用该对象的next方法
停止迭代器:
raise
迭代器的优缺点:
优点:
统一了迭代取值的方式
惰性计算:对于迭代器对象,他表示的是一个数据流,同一时间内,再内存中只会存在一个
值,只有再需要的时候,再调用next方法来迭代取值
而对于列表等容器类型,他们再内存中是直接存入所有元素,容器类型的大小、元素个数
受内存大小限制
缺点:
1. 迭代器的目的就是不断的逼近目标值,所以迭代器只能向前取,不能后退
2. 迭代器对象的迭代没有完成,就永远不知道其长度
3. 对于同一个迭代器,只能有一个for in 循环获取到迭代值
4. 对于未取尽的迭代器,下次调用时,会接着上次的状态
生成器
生成器就是一个特殊的迭代器,其中使用到了状态保存技术
(i for i in range(1, 10))
def xxx():
yield
x =xxx()
next(x)
x.send(None)
filter(function(a) ,iterable)
map(function(a), iterable)
from functools import reduce
reduce(function(a), iterable, xx)
魔术方法
__class__
__name__
__module__
__dict__
__doc__
__mro__
__slots__
__init__
__new__
__dir__
__call__
__doc__
__str/repr__
__len__
__hash__
__ne/eq/lt/le/gt/ge__
__add/sub/mul/truediv/pow__
__str/int/setitem/getitem/delitem__
__enter/exit__
'''