Что должен дать itertools.product (), когда предоставлен пустой список?

Я думаю, это академический вопрос, но второй результат не имеет смысла для меня. Разве он не должен быть таким же пустым, как первый? В чем причина такого поведения?

from itertools import product

one_empty = [ [1,2], [] ]
all_empty = []

print [ t for t in product(*one_empty) ]  # []
print [ t for t in product(*all_empty) ]  # [()]

Обновления

Спасибо за все ответы - очень информативно.

Обсуждение Википедии оНуллярное декартово произведение дает окончательное утверждение:

Декартово произведение без множеств ... это одноэлементное множество, содержащее пустой кортеж.

А вот некоторый код, который вы можете использовать для работы с проницательнымответ от чего:

from itertools import product

def tproduct(*xss):
    return ( sum(rs, ()) for rs in product(*xss) )

def tup(x):
    return (x,)

xs = [ [1, 2],     [3, 4, 5]       ]
ys = [ ['a', 'b'], ['c', 'd', 'e'] ]

txs = [ map(tup, x) for x in xs ]  # [[(1,), (2,)], [(3,), (4,), (5,)]]
tys = [ map(tup, y) for y in ys ]  # [[('a',), ('b',)], [('c',), ('d',), ('e',)]]

a = [ p for p in tproduct( *(txs + tys) )                   ]
b = [ p for p in tproduct( tproduct(*txs), tproduct(*tys) ) ]

assert a == b

Ответы на вопрос(2)

Ваш ответ на вопрос