Python 首先定义一个只有两个方法的类drop\u init\u和iter__
这些天我在学习python,有一个小问题如下: 首先定义一个只有两个方法init和iter的类drop_ drop_的构造函数首先有一个参数iterable,给它一个iterable 方法init将函数iter应用于iterable,并将结果迭代器记录在某个属性中。然后它调用迭代器上的函数next一次 方法iter只返回属性中记录的迭代器 例如,drop_first[1,2,3]创建的实例允许迭代跳过第一个元素1 对于drop_first[1,2,3]中的x:printx 2和3将被打印 我用以下代码回答:Python 首先定义一个只有两个方法的类drop\u init\u和iter__,python,Python,这些天我在学习python,有一个小问题如下: 首先定义一个只有两个方法init和iter的类drop_ drop_的构造函数首先有一个参数iterable,给它一个iterable 方法init将函数iter应用于iterable,并将结果迭代器记录在某个属性中。然后它调用迭代器上的函数next一次 方法iter只返回属性中记录的迭代器 例如,drop_first[1,2,3]创建的实例允许迭代跳过第一个元素1 对于drop_first[1,2,3]中的x:printx 2和3将被打印 我用以
class drop_first:
def __init__(self, iterable):
self.iterable = iterable
self.index = 1
def __iter__(self):
return self
def __next__(self):
try:
result = self.iterable[self.index]
except IndexError:
raise StopIteration
self.index += 1
return result
然而,我发现创建一个内部只有2个方法的类是必需的,我对这两个方法的规范有点困惑。所以我想知道是否有人可以给我一些关于课程要求的解释…谢谢
首先定义一个只有两个方法init和iter的类drop_
糟糕的指令。此类应称为DropFirst。但就这样吧
drop_的构造函数首先有一个参数iterable,给它一个iterable
方法init将函数iter应用于iterable,并将结果迭代器记录在某个属性中。然后它调用迭代器上的函数next一次
方法iter只返回属性中记录的迭代器
这导致
class DropFirst: # or, if your instructor insists on it, drop_first
def __init__(self, iterable):
self.iterator = iter(iterable)
next(self.iterator)
def __iter__(self):
return self.iterator
但是,老实说,我会采取以下方法,这违反了规范,但更通用:
class DropFirst:
def __init__(self, iterable):
self.iterable = iterable
def __iter__(self):
iterator = iter(self.iterable)
next(iterator)
return iterator
这在所有情况下都有效,但可以重复多次。问题规范非常明确。你要填写的内容很少。你没有做问题规范要求你做的任何事情,比如在iterable上调用iter,或者在结果迭代器上调用next一次,或者在iter中返回迭代器。非常感谢你的善意解释,它帮助我理解了最初的问题,我想,这对新手来说有点困惑。。。但我还有一个问题,为什么iter方法中第二个版本的迭代器和下一个版本可以迭代多次。。?这两个版本的区别是什么?区别在于迭代器是一个只能使用一次的对象。一旦用完了,就没用了。像列表、字符串之类的iterable在每次调用_uiter_;时都会生成一个新的迭代器。
def __iter__(self):
return self.iterator
class DropFirst: # or, if your instructor insists on it, drop_first
def __init__(self, iterable):
self.iterator = iter(iterable)
next(self.iterator)
def __iter__(self):
return self.iterator
class DropFirst:
def __init__(self, iterable):
self.iterable = iterable
def __iter__(self):
iterator = iter(self.iterable)
next(iterator)
return iterator