3 votes

Python : paramètres de fonction sous forme de tuple avec sortie unique

J'ai une fonction en Python qui calcule l'entropie d'un certain nombre de paramètres que j'appelle ps comme suit

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

Je souhaite pouvoir passer plusieurs paramètres sous forme de liste ou de tuple, c'est-à-dire H([x]) mais cela ne donne pas le bon résultat, il calcule plutôt la valeur de H(xi) et renvoie un tuple pour chaque résultat. Je peux additionner chaque élément du tuple pour obtenir le résultat correct en raison de la nature de la fonction, mais je préférerais que la fonction donne le résultat souhaité pour des raisons de commodité. Si j'entre H(x1, x2, ...) la fonction donne le résultat correct.

Si quelqu'un a des suggestions, n'hésitez pas à m'en faire part.

Merci d'avance.

EDIT :

Exemple d'entrée et de sortie :

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

0.796578428466 [ 0.33219281  0.46438562]

4voto

jpp Points 83462

Ne pas déballer par le biais de la * dans la définition de votre fonction. Vous itérez déjà votre liste via votre fonction for boucle. Il est naturel d'utiliser un itérable comme argument de fonction.

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

En outre, n'oubliez pas le système intégré sum Il s'agit d'une mauvaise pratique.

1voto

Taohidul Islam Points 3035

Vous pouvez transmettre l'argument sous la forme d'un list o tuple . Vous pouvez éviter d'utiliser l'astuce unpack ici.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X