这个程序运行得很好
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]当我尝试运行此程序时,该程序未运行
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)输出:
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)时...
发布于 2018-03-14 06:01:23
当然,我们有range,不需要这样做。
但是当你在研究它的时候,为什么不这样做呢:
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)https://stackoverflow.com/questions/49223136
复制相似问题