Python:函数参数作为具有单个输出的元组

时间:2018-07-03 13:57:09

标签: python tuples parameter-passing

我在Python中有一个函数,该函数可以按如下方式计算多个参数的熵,我称之为ps

def H(*ps): 
    sum = 0.0
    for pi in ps:
        sum = sum - pi*np.log2(pi)
    return sum

我希望能够将多个参数作为列表或元组传递,即H([x]),但这不能给出正确的结果,而是计算H(xi)的值并返回一个元组每个结果。由于函数的性质,我能够对元组的每个元素求和以获得正确的结果,但是我宁愿能够使函数给出所需的输出以方便使用。如果输入H(x1, x2, ...),该函数将提供正确的输出。

如果有人有任何建议,请告诉我。

谢谢。

编辑:

样本输入和输出:

x = [0.1, 0.2]
print H(0.1, 0.2), H(x)

0.796578428466 [ 0.33219281  0.46438562]

2 个答案:

答案 0 :(得分:4)

请勿在函数定义中通过*运算符解压缩。您已经在通过for循环来迭代列表。将iterable用作函数参数是很自然的。

def H(ps): 
    x = 0.0
    for pi in ps:
        x = x - pi*np.log2(pi)
    return x

res = H([0.1, 0.2])

print(res)
0.796578428466

此外,不要遮盖内置sum,这是不明智的做法。

答案 1 :(得分:1)

您可以将参数作为listtuple传递。您可以在此处避免使用解包技巧。

def H(ps): #updated, not asterisk 
    my_sum = 0.0
    for pi in ps:
        my_sum = my_sum - pi*np.log2(pi)
    return my_sum
x = [0.1, 0.2]
print (H([0.1, 0.2])) #argument as list
print(H(x)) #argument as list