【问题标题】:TypeError: object takes no parametersTypeError:对象不带参数
【发布时间】:2016-08-18 06:23:42
【问题描述】:

我正在尝试创建一个使用 __iter__() 方法作为生成器的代码,但我收到一条错误消息:

TypeError: object() 没有参数。

另外,我不确定是否应该在 try: 或 main() 函数中调用我的 yield 函数

我对 Python 和编码还很陌生,因此非常感谢任何建议和建议,以便我学习。谢谢!

class Counter(object):

    def __init__(self, filename, characters):
        self._characters = characters
        self.index = -1

        self.list = []
        f = open(filename, 'r')
        for word in f.read().split():
            n = word.strip('!?.,;:()$%')
            n_r = n.rstrip()
            if len(n) == self._characters:
                self.list.append(n)

    def __iter(self):
        return self

    def next(self):
        try:
            self.index += 1
            yield self.list[self.index]

            except IndexError:
                raise StopIteration
            f.close()

if __name__ == "__main__":
    for word in Counter('agency.txt', 11):
        print "%s' " % word

【问题讨论】:

  • 请包括错误的 Traceback,它有帮助。
  • ...您的 __init 等方法末尾缺少两个下划线。这是__init__。这可能会导致错误。
  • 而且缩进也太远了。
  • 下划线的缩进和忘记的 init 是问题所在!非常感谢大家帮助我解决我愚蠢的错别字。

标签: python loops iterator generator yield


【解决方案1】:

yield 用于函数__iter__

class A(object):
    def __init__(self, count):
        self.count = count

    def __iter__(self):
        for i in range(self.count):
            yield i

for i in A(10):
    print i

在您的情况下,__iter__ 可能看起来像这样:

def __iter__(self):
    for i in self.list:
        yield i

【讨论】:

    【解决方案2】:

    你打错了__init__方法的声明,你输入了:

    def __init
    

    代替:

    def __init__ 
    

    【讨论】:

    • 哦,哇,我不敢相信我错过了。很高兴这个问题只是一个愚蠢的错字,但是,现在错误告诉我:TypeError: 'Counter' object is not iterable。想法?
    • @D.Lopez def __iter__也一样
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 2022-11-22
    • 2019-07-07
    • 2013-09-25
    • 1970-01-01
    相关资源
    最近更新 更多