擅长:python、mysql、java
<p><a href="https://docs.python.org/3/library/itertools.html#itertools.product" rel="noreferrer">^{<cd1>}</a>懒洋洋地生成结果,但对于参数来说不是这样。他们被热切地评价。每个iterable参数首先转换为一个元组:</p>
<p>参数的计算(不是结果的产生)与文档中显示的Python实现非常相似:</p>
<pre><code>...
pools = [tuple(pool) for pool in args] * repeat
</code></pre>
<p>然而,在<a href="https://github.com/python/cpython/blob/master/Modules/itertoolsmodule.c#L2072" rel="noreferrer">CPython implementation</a>中,<code>pools</code>是一个元组:</p>
^{pr2}$
<p>这是因为<code>product</code>有时需要多次遍历iterable,如果将参数保留为只能使用一次的迭代器,这是不可能的。</p>
<p>实际上,您无法从<code>itertools.count</code>对象构建元组。在传递给<code>product</code>之前,考虑使用<code>itertools.islice</code>将<em>切片到合理的长度。</p>