序列可以迭代的原因
解释器需要迭代对象x时,会自动调用iter(x)。
内置的iter(x)有以下作用:
- 检查对象是否实现了__iter__方法,如果实现了就调用它,获取一个迭代器。
- 如果没有实现__iter__方法,但是实现了__getitem__方法,Python会创建一个迭代器,尝试按顺序(从索引0开始)获取元素。
- 如果尝试失败,Python会抛出TypeError异常,通常会提示“C object is not iterable”,其中C是目标对象所属的类。
任何Python对象都可迭代的原因是,它们都实现了__getitem__方法。其实,标准序列也都实现了__iter__方法,因此你也应该这么做。之所以对__getitem__方法做特殊处理,是为了向后兼容。