Python itertools.chain到chain iter列表?

Python itertools.chain到chain iter列表?,python,itertools,chain,Python,Itertools,Chain,这可用于打印组合 import itertools def _yield_sample(): it = iter(itertools.combinations('ABCD', 2)) it2 = iter(itertools.combinations('EFGH', 3)) itc = itertools.chain(it,it2) for x in itc: yield x def main(): for x in _yield_sam

这可用于打印组合

import itertools
def _yield_sample():
    it = iter(itertools.combinations('ABCD', 2))
    it2 = iter(itertools.combinations('EFGH', 3))
    itc = itertools.chain(it,it2)
    for x in itc:
        yield x

def main():
    for x in _yield_sample():
        print x
但这是:

>>> 
('A', 'B')
('A', 'C')
('A', 'D')
...
不会,它会打印出来

def __position_combination(_count = [2,3,4,5]):
    its = []
    for ct in _count:
        it = iter(itertools.combinations('ABCDEFG', ct))
        its.append(it)
    itc = itertools.chain(its)
    for x in itc:
        yield x

def main():
    for x in __position_combination():
        print x
我的问题是:

itc = itertools.chain(*its)
他们之间有什么不同?根据
itertools.chain
执行以下操作:

itertools.chain(iter, iter, iter)  vs    itertools.chain(*[iter,iter,iter])
那么,为什么
itertools.chain(iter,iter,iter)
在这里也起作用呢?
这是否意味着国际热核实验堆,国际热核实验堆,国际热核实验堆=*(国际热核实验堆,国际热核实验堆,国际热核实验堆)?

但是

是指国际热核实验堆,国际热核实验堆,国际热核实验堆=*(国际热核实验堆,国际热核实验堆,国际热核实验堆)

不是靠它自己。参数解包仅在调用函数时有效,因此以下两个调用是等效的:

def chain(*iterables):
    # chain('ABC', 'DEF') --> A B C D E F
    for it in iterables:
        for element in it:
            yield element
但是
*[1,2,3]
不会编译,除非它是调用的一部分。您可以将普通(位置)参数与未打包的参数混合使用:

f(1,2,3)
f(*[1,2,3])
因此,上面的调用也相当于前两个调用

f(1,2,3)
f(*[1,2,3])
f(1,*[2,3])