鱼C论坛

 找回密码
 立即注册
查看: 1433|回复: 4

[已解决]迭代器中的__iter__()返回值

[复制链接]
发表于 2020-10-7 11:46:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Xx_Nemesis_xX 于 2020-10-7 12:00 编辑

小白想问一个简单的问题,
class MyRev:
    def __init__(self,args):
        self.Mylist = list(args)     
        self.Lenlist = len(self.Mylist)

        
    def __iter__(self):
        return self

    def __next__(self):
        self.Lenlist -= 1
        if self.Lenlist < 0:
            raise StopIteration
        return (self.Mylist[self.Lenlist],self.Lenlist)

请问如果令实例对象
myRev = MyRev("love")

for i in myRev:
        print(i,end="")

('e', 3)('v', 2)('o', 1)('l', 0)

其中的__iter__函数返回的self在哪里体现呢?这个细节点麻烦指点,谢谢~
最佳答案
2020-10-7 11:53:11
本帖最后由 疾风怪盗 于 2020-10-7 11:56 编辑

return 语句下面的代码是不执行的
和break一样

如果你用pycharm之类的IDE,就会发现报错提示了

myRev = Myev("icarus")这个也拼写错了

  1. class MyRev:
  2.     def __init__(self,args):
  3.         self.Mylist = list(args)
  4.         self.Lenlist = len(self.Mylist)


  5.     def __iter__(self):
  6.         return self

  7.     def __next__(self):
  8.         self.Lenlist -= 1
  9.         if self.Lenlist < 0:
  10.             raise StopIteration
  11.         return (self.Mylist[self.Lenlist],self.Lenlist)



  12. myRev = MyRev("icarus")
  13. for i in myRev:
  14.         print(i,end="")
复制代码


('s', 5)('u', 4)('r', 3)('a', 2)('c', 1)('i', 0)
Process finished with exit code 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-7 11:53:11 | 显示全部楼层    本楼为最佳答案   
本帖最后由 疾风怪盗 于 2020-10-7 11:56 编辑

return 语句下面的代码是不执行的
和break一样

如果你用pycharm之类的IDE,就会发现报错提示了

myRev = Myev("icarus")这个也拼写错了

  1. class MyRev:
  2.     def __init__(self,args):
  3.         self.Mylist = list(args)
  4.         self.Lenlist = len(self.Mylist)


  5.     def __iter__(self):
  6.         return self

  7.     def __next__(self):
  8.         self.Lenlist -= 1
  9.         if self.Lenlist < 0:
  10.             raise StopIteration
  11.         return (self.Mylist[self.Lenlist],self.Lenlist)



  12. myRev = MyRev("icarus")
  13. for i in myRev:
  14.         print(i,end="")
复制代码


('s', 5)('u', 4)('r', 3)('a', 2)('c', 1)('i', 0)
Process finished with exit code 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-7 12:02:15 | 显示全部楼层
疾风怪盗 发表于 2020-10-7 11:53
return 语句下面的代码是不执行的
和break一样

感谢指点,顺便问下__iter__()语句的返回值self在哪里体现呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-7 12:06:55 | 显示全部楼层
Xx_Nemesis_xX 发表于 2020-10-7 12:02
感谢指点,顺便问下__iter__()语句的返回值self在哪里体现呢?

魔法方法和装饰器,这两块都没学好,感觉挺抽象的,平常也用的不多

看这个解释吧https://blog.csdn.net/will130/article/details/50920501

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-7 12:12:56 | 显示全部楼层
疾风怪盗 发表于 2020-10-7 12:06
魔法方法和装饰器,这两块都没学好,感觉挺抽象的,平常也用的不多

看这个解释吧https://blog.csdn.ne ...

好的,感谢指点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-2 17:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表