请教一个关于列表解析的问题

2017-08-09 20:14:54 +08:00
 saximi
class Iters:
def __init__(self, value):
self.data = value

def __iter__(self):
print('iter=>', end='')
self.ix = 0
return self

def __next__(self):
print( 'next:', end=' ')
if self.ix== len(self.data): raise StopIteration
item = self.data[self.ix]
self.ix += 1
return item


X = Iters([1, 2, 3, 4, 5])
print([i ** 2 for i in X])

上面代码输出如下:
iter=>next: next: next: next: next: next: [1, 4, 9, 16, 25]

我的问题是,为何输出是连着 6 个“ next: ”然后才是列表,而不是形如“ next: 1 ”这种在“ next: ”后紧跟数字的方式?
谢谢
1548 次点击
所在节点    Python
3 条回复
symons
2017-08-09 21:07:50 +08:00
你这 6 个 next:是在构建迭代器的时候输出的,然后最后输出的是[1, 4, 9, 16, 25]
symons
2017-08-09 21:13:32 +08:00
```python
class Iters:
def __init__(self, value):
self.data = value

def __iter__(self):
print('iter=>', end='')
self.ix = 0
return self

def __next__(self):
print( 'next:', end=' ')
if self.ix== len(self.data): raise StopIteration
item = self.data[self.ix]
self.ix += 1
return item


X = Iters([1, 2, 3, 4, 5])
heihei = ([i ** 2 for i in X])

print ('\n====================')

print (heihei)

```

[symons@symons_laptop symons]$ python haha.py
iter=>next: next: next: next: next: next:
====================
[1, 4, 9, 16, 25]

看这个代码和运行结果就知道啦
jmc891205
2017-08-10 10:53:57 +08:00
因为你只在__next__里 print 了'next:',没有 print self.data[self.ix]啊。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/381762

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX