永发信息网

《Python基础教程》代码不兼容,不知道为什么怎么解决,求大神解答。

答案:2  悬赏:70  手机版
解决时间 2021-03-24 13:14
  • 提问者网友:浩歌待明月
  • 2021-03-23 16:26
书本源代码:
class TestIterator:
value = 0
def next(self):
self.value += 1
if self.value > 10:
raise StopIteration
return self.value
def __iter__(self):
return self
为什么这段代码运行出错,
>>>ti =TestIterator()
>>>ti.next()
1
>>>ti.next()
2
>>>list(ti)
Traceback (most recent call last):
File "", line 1, in
list(ti)
TypeError: iter() returned non-iterator of type 'TestIterator'
书本也是这样写的,这段代码似懂非懂状态,我用的是Python3.5,书本说兼容3.x版本的。不知道为什么出错。
为什么类方法next()数据不能储存?
书本list(ti)会输出[1,2,3......10]的.。
list()不能只有一个数据吗?因为我随便赋值a=1,list(a)也会出错,应该怎么都输出一个数据啊,比如>>>list(ti.next())会输出【1】吧,为什么?

我的是Python3.6版本出错,出错如下:
Traceback (most recent call last):
File"", line 1, in
list(ti)
TypeError:iter() returned non-iterator of type 'TestIterator'
最佳答案
  • 五星知识达人网友:你哪知我潦倒为你
  • 2021-03-23 17:41
《Python基础教程》中案例代码是完全依据Python2.x版写的。
所以要想正常运行最好用Python2.7的环境。
要在Python3.X下运行代码要改一下。
class TestIterator:
    value = 0
    def __next__(self):
        self.value += 1
        if self.value > 10:
            raise StopIteration
        return self.value
    def __iter__(self):
        return self

ti =TestIterator()

print(next(ti))
print(next(ti))
print(list(ti))

因为Python3中对迭代器协议有些改变
next()方法改名字为__next__()
调用方式也只能用next(ti)这样了
全部回答
  • 1楼网友:天凉才是好个秋
  • 2021-03-23 18:16
是的,学习知识有一些前置课程,网络编程需要tcp/ip知识,可以先对协议有所了解之后再深入学习这章。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯