Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 首先定义一个只有两个方法的类drop\u init\u和iter___Python - Fatal编程技术网

Python 首先定义一个只有两个方法的类drop\u init\u和iter__

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将被打印 我用以

这些天我在学习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