如何在 Python 中 return/receive 多个参数?

How to return/receive multiple arguments in Python?

我正在尝试 return 给定整数的所有可能因式分解的集合。

我处理这个问题的方式如下。一个整数可以写成质数的乘积,每个质数的幂。我有一个函数可以创建一个列表,其中包含素数的幂列表。

例如:1400 = 2^3*5^2*7。所以我有一个函数可以产生

K = [[[2, 2, 2], [4, 2], [8]], [[5, 5], [25]], [[7]]]

这是一个包含三个元素的列表。然后我可以通过

生成所有因式分解的集合
product([[2, 2, 2], [4, 2], [8]], [[5, 5], [25]], [[7]])
Out:
[([2, 2, 2], [5, 5], [7]),
 ([2, 2, 2], [25], [7]),
 ([4, 2], [5, 5], [7]),
 ([4, 2], [25], [7]),
 ([8], [5, 5], [7]),
 ([8], [25], [7])]

其中 product 是从 itertools 调用的。

问题是我想要的是 product 列表 K 元素(就好像用户已经写了 3函数产品的参数)。但我似乎无法创建一个能够在一般情况下执行此操作的功能。一般来说,我不知道我需要提供多少参数product。这可以做到吗?我确信我可以找到一种不那么奇怪的方法来做到这一点,但现在我很好奇是否可以这样做,如果不能,为什么。

您可以使用 "star" 语法为函数接受可变数量的参数

def foo(*args):
    # args is a tuple containing all arguments passed to foo
    print(len(args))

现在您可以向 foo 传递任意数量的参数

foo(1, 2, 3)  # prints 3
foo(1, 2, 3, 4, 5, 6)  # prints 6

试试这个:

factors = [[2, 2, 2], [4, 2], [8]], [[5, 5], [25]], [[7]]
print(list(product(*factors)))

阅读 Python's Official Documentation 中的解包参数列表。