python 迭代器

# 迭代: 当前执行依赖于上一次执行结果,


可迭代对象
  内置了__iter__()方法的,就是可迭代对象
  基本数据类型中,属于可迭代对象的有:字典、列表、元组、集合、字符串、文件对象。
迭代器对象:#打印类型是iterator
  可迭代对象调用__iter__()方法,返回值就是迭代器对象。
  迭代器对象调用__iter__()方法,返回依然是自己
  迭代器对象.__iter__().__iter__().__iter__() 等价与 迭代器对象.__iter__()
  (很重要,文件对象可以实现for循环的原理就是这个。)
迭代器对象的特点
  迭代器对象有两个方法: __iter__()方法和 __next__()方法。
  迭代器是一种节省空间的数据类型,可以被for循环,但是不会占用太大的内存空间。举例 range(10)
  迭代器不依赖于索引取值。。
  既是可迭代对象又是迭代器对象的, 就是文件类型。
迭代器取值:
  (1)迭代器调用__next__()方法,依赖于前边的执行次数,每次会获得一个值。如果取完了,就会报错。
  内置方法的简写:对象.__方法名__(),可以简写为 方法名(对象), 很多方法都可以,但不是全部,
  ‘abc’.__iter__()方法 等价与 iter('abc')
  'abc'.__iter__().__next__() 等价与 next('abc'.__iter__())
for循环内部原理:
  以列表为例:

ll =[1,2,3,4]

llIter = ll.__iter__()
while True:
  try:
    llIter.__next__()
  except Exception:
    break

for i in ll 这句话就是先对ll调用__iter__(), 从可迭代对象变成迭代器对象,然后使用while True循环调用__next__()方法,直到程序异常报错,
文件类型既是可迭代对象也是迭代器对象,底层调用__iter__()方法,返回的依然是自己。因此文件类型是支持for循环的。

posted @ 2022-11-03 19:58  往昔遗忘  阅读(22)  评论(0编辑  收藏  举报