Python开发【第五篇】:Python基础之迭代器,生成器

  
  

迭代器

     

一、迭代的概念

  

迭代器即迭代的工具,那什么是迭代呢?
迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值

  

<>强优点:

  
      <李>提供一种统一的,不依赖于索引的迭代方式李   <李>惰性计算,节省内存
    <强>缺点:   <李>无法获取长度(只有在未来完毕才知道到底有几个值)   <李>一次性的,只能往后走,不能往前退李   
  

<强> 1,为何要有迭代器?

  

对于序列类型:字符串,列表,元组,我们可以使用索引的方式迭代取出其包含的元素。但对于字典,集合,文件等类型是没有索引的,若还想取出其内部包含的元素,则必须找出一种不依赖于索引的迭代方式,这就是迭代器

  

<强> 2,什么是可迭代对象?

  

可迭代对象指的是内置有<强> iter 强方法的对象,即obj。<强> iter 强,如下

  
 <代码> . __iter__“你好”
  . __iter__ (1、2、3)
  . __iter__ (1、2、3)
  {a: 1} . __iter__
  {' a ', ' b '} . __iter__
  打开(“a.txt”) . __iter__  
  

<强> 3,什么是迭代器对象?

  

可迭代对象执行obj。<强> iter ()得到的结果就是迭代器对象
而迭代器对象指的是即内置有<强> iter 强又内置有下 <强>方法的对象

  
 <代码>文件类型是迭代器对象
  打开(“a.txt”) . __iter__ ()
  open (a.txt) .__next__()  
  

二,迭代器对象的使用

  
 <代码> dic={“a”: 1、“b”: 2,“c”: 3}
  iter_dic=dic.__iter__() #得到迭代器对象,迭代器对象即有__iter__又有__next__,但是:迭代器. __iter__()得到的仍然是迭代器本身
  iter_dic.__iter__ () iter_dic #是正确的
  
  print (iter_dic.__next__()) #等同于下(iter_dic)
  print (iter_dic.__next__()) #等同于下(iter_dic)
  print (iter_dic.__next__()) #等同于下(iter_dic)
  #打印(iter_dic.__next__()) #抛出异常抛出StopIteration,或者说结束标志
  
  #有了迭代器,我们就可以不依赖索引迭代取值了
  iter_dic=dic.__iter__ ()
  而1:
  试一试:
  k=next (iter_dic)
  print (dic [k])
  除了抛出StopIteration:
  打破 
  

三,循环

  
 <代码> #基于为循环,我们可以完全不再依赖索引去取值了
  dic={“a”: 1、“b”: 2,“c”: 3}
  在dic k:
  print (dic [k])
  
  #为循环的工作原理
  # 1:执行后的对象的dic.__iter__()方法,得到一个迭代器对象iter_dic
  # 2:执行下(iter_dic),将得到的值赋值给k,然后执行循环体代码
  # 3:重复过程2,直到捕捉到异常抛出StopIteration,结束循环 
  
  

生成器

     

一、什么是生成器

  
 <代码> #只要函数内部包含有产量关键字,那么函数名()的到的结果就是生成器,并且不会执行函数内部代码
  
  def func ():
  print(====在第一)
  产生1
  print(“====比;二”)
  收益率2
  print(“====在第三”)
  产生3
  print(====在结束)
  
  g=func ()
  打印(g) # & lt;发电机在0 x0000000002184360>对象函数; 
  

<强>产量总结

  

1,把函数做成迭代器
2,对比,可以返回多次值,可以挂起/保存函数的运行状态

  

二、三元表达式

  
 <代码> name=输入(“姓名祝辞祝辞:')
  res=橙恕绻鹡ame==把抢怂埂逼渌白ⅰ?
  打印(res)  
  

三,列表解析

  

优点:方便,改变了编程习惯,可称之为声明式编程

  
 <代码> egg_list=[]
  因为我在范围(10):
  egg_list。追加(“鸡蛋% s ' % i)
  
  egg_list=['鸡蛋% s ' %我的范围(10)) 
  

四、生成器表达式

  
 <代码> # 1,把列表推导式的[]换成()就是生成器表达式
  
  # 2,示例:生一筐鸡蛋变成给你一只老母鸡,用的时候就下的蛋,这也是生成器的特性
  在在在鸡=('鸡蛋% s ' %我因为我在范围(5))
  在在在鸡
  & lt;发电机对象& lt; genexpr>在0 x10143f200>
  在在在下一个(鸡)
  “鸡蛋0 '
  在在在列表(鸡)#因鸡可迭代,因而可以转成列的表
  ['鸡蛋1”、“鸡蛋2 ','鸡蛋3 ','鸡蛋4 ',)
  
  # 3,优点:省内存,一次只产生一个值在内存中

Python开发【第五篇】:Python基础之迭代器,生成器