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

问题描述 投票:0回答:1

1992 年左右引入了数学的一部分,称为多重 zeta 值 (MZV) 理论。在该理论中,我们研究参数嵌套无限级数的性质(例如,参见here了解一个特定变体的定义)因此,其数值评估具有很高的计算复杂度。几天前,我开始使用Python来计算特定MZV的基本部分和。

下面的代码允许我通过更改输入来计算所谓的多个 zeta 星值 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 维 MZV 的部分和本质上取决于它们形成 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)
等,并使用两个参数的给定分隔符。

python definition
1个回答
0
投票

看起来您正在寻找一个函数包装器,它接受您真正想要的参数,并且将函数

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)
© www.soinside.com 2019 - 2024. All rights reserved.