【发布时间】:2016-08-03 07:17:02
【问题描述】:
我正在尝试更多地了解 Python 3 中的 __iter__。出于某种原因,我对 __getitem__ 的理解比 __iter__ 更好。我想我不知何故没有得到相应的 next 实现,然后是__iter__。
我有以下代码:
class Item:
def __getitem__(self,pos):
return range(0,30,10)[pos]
item1= Item()
print (f[1]) # 10
for i in item1:
print (i) # 0 10 20
我理解上面的代码,但我又该如何使用__iter__ 和__next__() 编写等效代码?
class Item:
def __iter__(self):
return self
#Lost here
def __next__(self,pos):
#Lost here
我知道当 python 看到 __getitem__ 方法时,它会尝试通过调用具有以 0 开头的整数索引的方法来迭代该对象。
【问题讨论】:
-
在真实清单上试一试。
mylist.__iter__函数返回一个生成器。您可以通过调用my_generator.next()几次来通过此生成器执行一些步骤。但是我不会称它为等价,因为列表项访问是恒定时间,而迭代直到某个点是线性时间。 -
def __iter__(self): return (x for x in range(0,30,10))呢? -
@machineyearning 我也需要传递一个索引。 (自我,位置)
-
不确定你的意思。
-
在上面的代码中,我其实也想传递一个索引参数。例如。如果我想实现类似 print(f[1]) 的东西,1 是我想传递给方法的索引。
标签: python python-3.x iterator