当前位置: 首页 > 面试题库 >

Python的itertools.repeat的目的是什么?

昌正奇
2023-03-14
问题内容

我可以想到的对于Pythonitertools.repeat()类的每次使用,我都可以想到另一个同样(可能更多)可接受的解决方案,以实现相同的效果。例如:

>>> [i for i in itertools.repeat('example', 5)]
['example', 'example', 'example', 'example', 'example']
>>> ['example'] * 5
['example', 'example', 'example', 'example', 'example']

>>> list(map(str.upper, itertools.repeat('example', 5)))
['EXAMPLE', 'EXAMPLE', 'EXAMPLE', 'EXAMPLE', 'EXAMPLE']
>>> ['example'.upper()] * 5
['EXAMPLE', 'EXAMPLE', 'EXAMPLE', 'EXAMPLE', 'EXAMPLE']

在任何情况下,这都是最合适的解决方案吗?如果是这样,在什么情况下?


问题答案:

itertools.repeat函数是惰性的;它仅使用一项所需的内存。另一方面,(a,) * n[a] * n惯用法在内存中创建对象的n个副本。对于五个项目,乘法习惯用法可能更好,但是如果必须重复一百万次,您可能会注意到资源问题。

不过,很难想象的许多 静态 用途itertools.repeat。但是,事实上,它itertools.repeat是一个 功能,
使您可以在许多功能应用程序中使用它。例如,您可能具有一些func可对输入进行迭代的库函数。有时,您可能已经预先构造了各种项目的列表。其他时候,您可能只想对统一列表进行操作。如果列表很大,itertools.repeat将节省您的内存。

最后,repeat使itertools文档中描述的所谓“迭代器代数”成为可能。甚至itertools模块本身也使用该repeat功能。例如,以下代码作为的等效实现给出itertools.izip_longest(即使实际代码可能用C编写)。请注意repeat从底部开始使用七行:

class ZipExhausted(Exception):
    pass

def izip_longest(*args, **kwds):
    # izip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D-
    fillvalue = kwds.get('fillvalue')
    counter = [len(args) - 1]
    def sentinel():
        if not counter[0]:
            raise ZipExhausted
        counter[0] -= 1
        yield fillvalue
    fillers = repeat(fillvalue)
    iterators = [chain(it, sentinel(), fillers) for it in args]
    try:
        while iterators:
            yield tuple(map(next, iterators))
    except ZipExhausted:
        pass


 类似资料:
  • 问题内容: 什么是语句的简单基本解释是什么,如何在中使用它? 它和语句之间有什么区别? 问题答案: 该函数在控制台中写入一个字符串,即“打印”。该语句使您的函数退出并将值返回给其调用者。通常,功能的要点是接受输入并返回某些内容。当函数准备向其调用者返回值时使用该语句。 例如,这是一个同时使用和的函数: 现在,您可以运行调用的代码,如下所示: 如果将其作为脚本(例如.py文件)而不是在Python解

  • 问题内容: Python的内部/嵌套类使我感到困惑。没有他们,有什么事情是无法完成的吗?如果是这样,那是什么东西? 问题答案: 引用自http://www.geekinterview.com/question_details/64739: 内部类的优点: 类的逻辑分组 :如果一个类仅对另一个类有用,那么将其嵌入该类并将两者保持在一起是合乎逻辑的。嵌套此类“帮助程序类”可使它们的程序包更加简化。 增

  • 问题内容: 在各种与Python相关的文章中都提到了该目录。它是什么?如何使用它? 问题答案: 是手动构建的Python软件包的 目标目录 。从源代码构建和安装Python软件包时(使用 distutils ,可能通过执行),默认情况下会找到已安装的模块。 有标准位置: Unix(纯)1: Unix(非纯): 视窗: 1 Pure 表示该模块仅使用Python代码。 非纯 也可以包含C / C +

  • 问题内容: 的用途是什么? 我知道你可以在表上进行传递参数。 我还可以指定时间增量吗? 它是如何工作的?它是“拆包”类吗?喜欢a,b=1,2吗? 问题答案: 你可以用来让函数接受任意数量的关键字参数(表示“关键字参数”): 你还可以在调用函数时使用语法,方法是构造关键字参数字典并将其传递给函数: 在Python指南,包含了如何工作的,有一些很好的例子沿着一个很好的解释。 对于使用Python 3的

  • 问题内容: Python中self这个词的目的是什么?我知道它是指从该类创建的特定对象,但是我看不到为什么需要将它作为参数显式添加到每个函数中。为了说明这一点,在中,我可以这样做: 我很容易理解。但是在Python中,我需要包括: 问题答案: 让我们看一个简单的向量类: 我们希望有一种计算长度的方法。如果我们想在类中定义它,它将是什么样? 当我们将其定义为全局方法/函数时,它应该是什么样? 因此,

  • 各种Python相关文章中都提到了目录< code>site-packages。什么事?怎么用?