Python: Может ли функция возвращать массив и переменную?

Есть ли простой способ получить функцию для возврата np.array и переменной?

например:

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

чтобы значения, вычисленные в функции, могли использоваться позже в коде? Вышеупомянутое игнорирует значения, вычисленные в функции.

Я попробовал вернуть кортеж {my_array, my_variable}, но получил сообщение типа unhashable для np.array

Д

Ответ 1

Не игнорируя возвращенные значения, вы не назначаете их переменным.

my_array, my_variable = my_function()

Ответ 2

Ваша функция верна. Когда вы пишете return my_array,my_variable, ваша функция фактически возвращает кортеж (my_array, my_variable).

Вы можете сначала присвоить возвращаемое значение my_function() переменной, которая будет описываться этим кортежем:

result = my_function()

Далее, поскольку вы знаете, сколько элементов находится в кортеже досрочно, вы можете распаковать кортеж на два разных значения:

result_array, result_variable = result

Или вы можете сделать это в одной строке:

result_array, result_variable = my_function()

Другие примечания, связанные с возвращаемыми кортежами, и распаковка:

Я иногда разделяю два этапа, если моя функция может вернуть None в неисключительный отказ или пустой случай:

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

Вместо распаковки, вы также можете получить доступ к указанным элементам из кортежа, используя их индекс:

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

Если по какой-то причине у вас есть 1-элементный кортеж:

return (my_variable,)

Вы можете распаковать его с помощью одного и того же (слегка неловкого) синтаксиса с одной запятой:

my_variable, = my_function()

Ответ 3

простой ответ

my_array, my_variable = my_function()

Ответ 4

После определения my_function используйте my_function = np.vectorize(my_function).
Например,

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

jinc = np.vectorize(jinc)

Ответ 5

Я получил 1.250/4.000 ГПД. В пяти классах, которые я взял, вот мои результаты семестра весны 2019 года: F/A D/A F/A B+/A и 1 кредитный класс (B-/A). Итак, 1,25 ГПа за семестр в течение второго курса