>>> def product(*lists):
... return [()] if not lists else \
... sum(map(lambda x: map(lambda xs: (x,) + xs, product(*lists[1:])),
... lists[0]), [])
...
>>> product([1,2,3],"AB","xy")
[(1, 'A', 'x'), (1, 'A', 'y'), (1, 'B', 'x'), (1, 'B', 'y'), (2, 'A', 'x'), (2, 'A', 'y'), (2, 'B', 'x'), (2, 'B', 'y'), (3, 'A', 'x'), (3, 'A', 'y'), (3, 'B', 'x'), (3, 'B', 'y')]

こう書くと無駄に暗号的な上に、いかにも効率が悪い