it-swarm.com.de

Python: Kann eine Funktion ein Array und eine Variable zurückgeben?

Gibt es eine einfache Möglichkeit, eine Funktion zu erhalten, um ein np.array und eine Variable zurückzugeben?

z.B:

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()

damit die in der Funktion berechneten Werte später im Code verwendet werden können? Die obigen Angaben ignorieren die in der Funktion berechneten Werte.

Ich habe versucht, ein Tuple {my_array, my_variable} zurückzugeben, erhielt aber die Nachricht vom Typ "unhashable" für np.array

DN

9
dcnicholls

Dabei werden die zurückgegebenen Werte nicht ignoriert, Sie werden nicht Variablen zugewiesen.

my_array, my_variable = my_function()
5
Andy

Ihre Funktion ist korrekt. Wenn Sie return my_array,my_variable schreiben, gibt Ihre Funktion tatsächlich einen Tuple (my_array, my_variable) zurück.

Sie können zuerst den Rückgabewert von my_function() einer Variablen zuweisen. Dies wäre das von mir beschriebene Tupel:

result = my_function()

Da Sie vorab wissen, wie viele Elemente sich im Tuple befinden, können Sie das Tuple auspacken in zwei verschiedene Werte einbetten:

result_array, result_variable = result

Oder Sie können es in einer Zeile machen:

result_array, result_variable = my_function()

Weitere Hinweise zu zurückkehrenden Tupeln und Tupel-Auspacken:

Manchmal halte ich die beiden Schritte getrennt, wenn meine Funktion None in einem nicht außergewöhnlichen Fehler oder leeren Fall zurückgeben kann:

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

Anstelle des Auspackens können Sie alternativ über den Index auf bestimmte Elemente zugreifen, indem Sie deren Index verwenden:

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

Wenn Sie aus irgendeinem Grund einen Tupel mit 1 Artikel haben:

return (my_variable,)

Sie können es mit der gleichen (etwas unhandlichen) Ein-Kommasyntax auspacken:

my_variable, = my_function()
12

einfache Antwort

my_array, my_variable = my_function()
1
Curry

Verwenden Sie nach der Definition von my_function my_function = np.vectorize (my_function).
Zum Beispiel, 

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

jinc = np.vectorize(jinc)
0
Ciro Xue