Python论坛 - 国内最好的Python中文社区

标题: 在Python2.x版本迭代器输出错误,请帮忙 [打印本页]

作者: jingseyi2011    时间: 2017-12-22 17:09
标题: 在Python2.x版本迭代器输出错误,请帮忙
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#构造迭代器
class MyIter(object):
    def __init__(self,start,end):
        self.start = start
        self.end = end
    def __iter__(self):
        return self
    def __next__(self):
        if self.start < self.end:
            r = self.start
            self.start += 1
            return r
        else:
            raise StopIteration
        
if __name__ == '__main__':
    m = MyIter()
    for i in m(1,10):
        print(i)
在主函数中,输出一直报错:
Traceback (most recent call last):
  File "D:/SW/Python/program-defined/52_chapter10_Iteration.py", line 20, in <module>
    m = MyIter()
TypeError: __init__() takes exactly 3 arguments (1 given)

请问是版本的问题么?

作者: uitb    时间: 2017-12-22 20:02
m = MyIter(1,10)
作者: jingseyi2011    时间: 2017-12-25 10:03
还是没过呢,请问你用的是哪个版本的Python?
class MyIter(object):
    def __init__(self,start,end):
        self.start = start
        self.end = end
    def __iter__(self):
        return self
    def __next__(self):
        if self.start < self.end:
            r = self.start
            self.start += 1
            return r
        else:
            raise StopIteration
        
if __name__ == '__main__':
    m = MyIter(1,10)
    for i in m(1,10):
        print(i)

>>>

Traceback (most recent call last):
  File "D:\SW\Python\program-defined\52_chapter10_Iteration.py", line 20, in <module>
    for i in m(1,10):
TypeError: 'MyIter' object is not callable
作者: 剑心无痕    时间: 2017-12-25 10:38
jingseyi2011 发表于 2017-12-25 10:03
还是没过呢,请问你用的是哪个版本的Python?
class MyIter(object):
    def __init__(self,start,end):

for i in m:
不是m(1,10), m是MyIter对象,没有定义__call__所以不能像函数一样调用
作者: 剑心无痕    时间: 2017-12-25 10:40
你原本是这个意思吧
class MyIter(object):
    def __init__(self,start,end):
        self.start = start
        self.end = end
    def __iter__(self):
        return self
    def __next__(self):
        if self.start < self.end:
            r = self.start
            self.start += 1
            return r
        else:
            raise StopIteration
        
if __name__ == '__main__':
    m = MyIter   #m是Mylter类,而不是实例化对象
    for i in m(1,10):
        print(i)
作者: jingseyi2011    时间: 2017-12-26 13:55
剑心无痕 发表于 2017-12-25 10:40
你原本是这个意思吧
class MyIter(object):
    def __init__(self,start,end):

谢谢大神,你的意思是:m只是用来代替MyIter这个类的,并不是实例化以后的对象,也就是说语句也可以是这样的?
if __name__ == '__main__':
      for i in MyIter(1,10):
             print(i)
作者: 剑心无痕    时间: 2017-12-26 14:16
jingseyi2011 发表于 2017-12-26 13:55
谢谢大神,你的意思是:m只是用来代替MyIter这个类的,并不是实例化以后的对象,也就是说语句也可以是这 ...

可以,就是这个意思
作者: jingseyi2011    时间: 2017-12-27 14:10
剑心无痕 发表于 2017-12-26 14:16
可以,就是这个意思

谢谢!




欢迎光临 Python论坛 - 国内最好的Python中文社区 (https://bbs.pythontab.com/) Powered by Discuz! X3.4