web-dev-qa-db-fra.com

Python: Une fonction peut-elle retourner un tableau et une variable?

Existe-t-il un moyen simple d'obtenir une fonction pour renvoyer un np.array et une variable?

par exemple:

my_array = np.zeros(3)
my_variable = 0.

def my_function():
    my_array = np.array([1.,2.,3.])
    my_variable = 99.
    return my_array,my_variable

my_function()

afin que les valeurs calculées dans la fonction puissent être utilisées plus tard dans le code? Ce qui précède ignore les valeurs calculées dans la fonction.

J'ai essayé de renvoyer un tuple {my_array, my_variable} mais j'ai reçu le message de type inshashable pour np.array.

DN

9
dcnicholls

Ce n'est pas en ignorant les valeurs renvoyées, vous ne les affectez pas à des variables.

my_array, my_variable = my_function()
5
Andy

Votre fonction est correcte. Lorsque vous écrivez return my_array,my_variable, votre fonction renvoie en fait un (my_array, my_variable) de tuple.

Vous pouvez d’abord attribuer la valeur de retour de my_function() à une variable, ce qui serait ce tuple que je décris:

result = my_function()

Ensuite, puisque vous savez combien d'éléments sont dans le tuple à l'avance, vous pouvez décompresser le tuple _ en deux valeurs distinctes:

result_array, result_variable = result

Ou vous pouvez le faire en une seule ligne:

result_array, result_variable = my_function()

Autres remarques relatives au retour des n-uplets et au déballage des tuples:

Je garde parfois les deux étapes séparées, si ma fonction peut renvoyer None dans un échec non exceptionnel ou un cas vide:

result = my_function()
if result == None:
    print 'No results'
    return
a,b = result
# ...

Au lieu de décompresser, vous pouvez également accéder aux éléments spécifiés à partir du tuple, en utilisant leur index:

result = my_function()
result_array = result[0]
result_variable = result[1]

Si, pour une raison quelconque, vous avez un tuple à 1 élément:

return (my_variable,)

Vous pouvez le décompresser avec la même syntaxe à une virgule (légèrement maladroite):

my_variable, = my_function()
12
Jonathon Reinhart

réponse facile

my_array, my_variable = my_function()
1
Curry

Après la définition de ma_fonction, utilisez ma_fonction = np.vectorize (ma_fonction).
Par exemple, 

def jinc(x):
    if x == 0.0:
        return 1
    return 2*j1(x)/x

jinc = np.vectorize(jinc)
0
Ciro Xue