在Python中定义一个参数为列表的函数

0 投票
1 回答
61 浏览
提问于 2025-04-12 00:47

有一部分数学叫做多重齐塔值理论(MZVs),大约在1992年被提出。在这个理论中,我们研究一种叫做参数嵌套无限级数的东西(如果你想了解某个特定的定义,可以看看这里)。这些级数的数值计算非常复杂,通常需要花费很多时间。几天前,我开始用Python来计算一些特定MZVs的基本部分和。

下面的代码可以让我计算所谓的多重齐塔星值 zeta*(10,2,1,1,1) 的第20个部分和,或者通过改变输入的 Sn 来计算其他类似的情况。

S = (10, 2, 1, 1, 1)
n = 20

l = len(S)

def F(d, N):
  if d == 0:
    return 1
  else:
    return sum(F(d-1, k)/(k**S[-d]) for k in range(1, N+1))

print(F(l, n))

当然,d维的MZVs的部分和主要依赖于它们的参数,这些参数组成一个d元组 (s_1, ..., s_d),以及上限 n

我想问的是,我们能否定义一个用户友好的函数 F([s_1, ..., s_d], n),其中第一个参数是一个整数列表,第二个参数是求和的上限n。这样,我就不需要分别输入 Sn,而是可以直接输入 F([10, 2, 1, 1, 1], 20)F([2, 1], 100) 等等,方便快捷。

1 个回答

2

看起来你想要一个函数包装器,它可以接收你想要的参数,并且在里面有一个本地的函数 F,然后调用这个函数:

def zeta(S, n):  # wrapper around F

    def F(d, n):
        if d == 0:
            return 1
        return sum(F(d-1, k)/(k**S[-d]) for k in range(1, n+1))

    return F(len(S), n)  # Call F and return what it returns

# Example call
result = zeta((10, 2, 1, 1, 1), 20)
print(result)

撰写回答