好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Pythonfor循环中in关键字含义是什么?

最常用的情况下,我理解,比如

 for   i   in   range  (  1  ,   5  ): 
     print   i 
 

回复内容: 关键词:迭代器

简单来说,for in 语句是一个语法糖,具体是这样的:
调用一个对象的 __iter__ 方法,方法会返回一个迭代器,所谓迭代器就是实现了 __next__ 方法的对象,如果一个对象本身就实现了 __next__(Python 2 中是直接 “next” 方法,没有下划线) ,可以直接返回自身。 调用迭代器的 __next__ 返回迭代器中的“下一个”元素,比如说第一次调用会返回 0,第二次会返回 1,如此这般。 最后没有元素了,迭代器抛出一个异常来表明自己没有元素了。for 语句会捕获这个异常并停下来。 我建议你独立写一个斐波那契的迭代器。
Mac 怎么让截图变正常大小啊 QAQ

另外,还有一个销魂的东西叫做生成器,演示一下如何优雅地斐波那契:
(此后的代码为了简洁我都用 Python 3 来写,用 Python 2 能运行但是性能糟糕。)

  def   fib  (  n  ): 
    a   =   0 
    b   =   1 
    for   _   in   range  (  n  ): 
        a  ,   b   =   b  ,   a  +  b 
        yield   a 
  
谢邀。刚看到问题以为楼主要问in是什么意思。
这个for实际上就是迭代,使用的是迭代器(Iterator)。

  # 以下代码在Python 2中运行 
 for   row   in   f  : 
     print   row 

 # 完全等价于 

 itr   =   f  .  __iter__  ()   # 获得新的迭代器 
 while   True  : 
     try  : 
         row   =   itr  .  next  () 
     except   StopIteration  : 
         break 
     print   row 
  
迭代器。


用dis转成虚拟机的指令
发现就是GET_ITER, FOR_ITER之类 发现就是GET_ITER, FOR_ITER之类 这都是把range(1:5)和f当成容器来看。文件f既然有行,那row自然是字符串了。 就个人理解:
in 关键字实现了一套python中的遍历协议.
协议A: __iter__ + next
循环时, 程序先使用__iter__ (相当于iter(instance) )获取具有next方法的对象, 然后通过其返回的对象, 不断调用其next方法, 直到 StopIteration错误抛出.

  class   A  : 
     def   __iter__  (  self  ): 
         self  .  limit   =   4 
         self  .  times   =   0 
         self  .  init   =   1 
         return   self 

     def   next  (  self  ): 
         if   self  .  times   >=   self  .  limit  : 
             raise   StopIteration  () 
         else  : 
             x   =   self  .  init 
             self  .  times   +=   1 
             self  .  init   +=   1 
             return   x 

 print   'A>>>>>>' 
 for   x   in   A  (): 
     print   x 
  

查看更多关于Pythonfor循环中in关键字含义是什么?的详细内容...

  阅读:51次

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网
[ SiteMap ]