在Python中定义一个参数为列表的函数
有一部分数学叫做多重齐塔值理论(MZVs),大约在1992年被提出。在这个理论中,我们研究一种叫做参数嵌套无限级数的东西(如果你想了解某个特定的定义,可以看看这里)。这些级数的数值计算非常复杂,通常需要花费很多时间。几天前,我开始用Python来计算一些特定MZVs的基本部分和。
下面的代码可以让我计算所谓的多重齐塔星值 zeta*(10,2,1,1,1) 的第20个部分和,或者通过改变输入的 S
和 n
来计算其他类似的情况。
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。这样,我就不需要分别输入 S
和 n
,而是可以直接输入 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)