day13 itertor

1.迭代器(itertor):

  迭代:迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结     果会作为下一次迭代的初始值。

2.探究迭代器的工作原理:

  可使用for循环的类型:list,dic,set,turple,f= open(),enumerate

  为什么这些类型可以使用for循环?

  print(dir(类型))  :可以用于查看函数里面存在的方法,即这些类型里面都存在某些相同的方法,而这些方法构成了循环这一功能

  循环的原理:

    循环的原理即调用函数内的方法:可使用双下划线的调用方法  例:print([].__iter__())

  探究是函数内的那些方法构成循环的这一功能?

    可使用交集判断是函数内那些方法(将类型转化为集合,在进行交集运算)

    例:

ret = set(dir([]))&set(dir({}))&set(dir(''))&set(dir(range(10))))
print(ret)

  输出结果:

{'__len__', '__getattribute__', '__str__', '__getitem__', '__lt__', '__gt__', '__ne__', '__new__', '__dir__', '__subclasshook__', '__delattr__', '__eq__', '__iter__', '__ge__', '__reduce_ex__', '__doc__', '__contains__', '__sizeof__', '__class__', '__init__', '__le__', '__hash__', '__format__', '__repr__', '__setattr__', '__reduce__', '__init_subclass__'}

  判断类型内是否有某种方法:(下面为探究iter是否在list中,是的话,结果为True)

  

print('__iter__' in dir([]))

  使用差集分析可得出:

print(set(dir([].__iter__()))-set(dir([])))

  结果为:

{'__length_hint__', '__setstate__', '__next__'}

  进而再对函数的方法含义再进行探究:

  例:

 l=[1,2,3]
 itertor = l.__iter__()
 print(itertor.__next__())
 print(itertor.__next__())
 print(itertor.__next__())

  结果为:1

      2

      3

iterable(可迭代的),itertor(迭代器)

  [].__iter__()   是可迭代的

  [].__next__() 可以将元素一个一个从迭代器中取出

  含有next和iter方法的类型就是一个迭代器

   可以被for循环的都是可迭代的

   可迭代的函数内部一定都有iter方法

   只要是迭代器就一定可迭代

  # for  只有时可迭代对象的时候,才能使用for
  当我们遇到一个新变量的时候,不能判断它是否能forx循环的时候,就胖段它是否迭代
  for i in l :
pass
  itertor = i.__iter__()
  itertor = i.__next__()
  '''
  #
  '''
  迭代器的好处:
  可以取到容器类型中一个一个的值
  节省内存空间,取一个值,释放一个值
  如果正常使用print(list(range(10000)))将会一次性占用内存
  '''

   

posted @ 2019-09-13 00:49  pickGo  阅读(105)  评论(0编辑  收藏  举报