首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不适用于@ _iter__

不适用于@ _iter__
EN

Stack Overflow用户
提问于 2018-03-12 01:45:15
回答 2查看 325关注 0票数 0

这个程序运行得很好

代码语言:javascript
复制
 class Iteration:
    def __init__(self,*data):
        self.data = data
        self.index = 0
    def __iter__(self):
        return self
    def __next__(self):
        if self.index >= len(self.data):
            raise StopIteration()
        data = self.data[self.index]
        self.index += 1
        return data
class Iterable(Iteration):
    lis=[]
    def __init__(self):
        self.data = [1,3,4,5,3]
    def __iter__(self):
        return Iteration(self.data)

for i in Iterable():
    print(i)
output:
[1, 3, 4, 5, 3]

当我尝试运行此程序时,该程序未运行

代码语言:javascript
复制
class Iterator:
    def __init__(self,data):
        self.data = data
        self.index = 0
    def __iter__(self):
        return self
    def __next__(self):
        if self.index >= len(self.data):
            raise StopIteration()
        data = self.data[self.index]
        self.index += 1
        return data
class Iterable(Iterator):
    lis = []
    @classmethod
    def _range(cls,data):
        if data == -1:
            return cls(sorted(Iterable.lis))
        if data != -1:
            Iterable.lis.append(data)
        data = Iterable._range(data-1)
    def __init__(self,data):
        self.data = data
        print(self.data)
    def __iter__(self):
        return Iterator(self.data)
i = Iterable._range(10)
output:
None
for i in Iterable.range(10):
    print(i)

输出:

代码语言:javascript
复制
   TypeError
   Traceback (most recent call last)
      <ipython-input-219-982b178ff9a6> in <module>()
      1 i = Iterable._range(10)
      2 print(i)
----> 3 for i in Iterable._range(10):
      4     print(i)

   TypeError: 'NoneType' object is not iterable

我正在尝试通过使用classmethod装饰器和特殊方法dunder来复制python range()函数。当我尝试运行print(self.data)时,它显示了正确的输出当我试图实例化这个类并运行它不起作用的print(i)时...

EN

Stack Overflow用户

发布于 2018-03-14 06:01:23

当然,我们有range,不需要这样做。

但是当你在研究它的时候,为什么不这样做呢:

代码语言:javascript
复制
class Iterator:
    def __init__(self, limit):
        self.data = list(range(limit)) 
        self.index = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.index == len(self.data):
            raise StopIteration()
        data = self.data[self.index]
        self.index += 1
        return data

    @property
    def last(self):
        return self.data[-1]

#it = Iterator(10)
#while it:
#    print(next(it))

print(Iterator(3).last)
print()

for value in Iterator(5):
    print(value)
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49223136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档