Как я могу вернуть несколько списков из функции, сохранив их имена? - PullRequest
0 голосов
/ 22 сентября 2019

У меня есть функция, которая создает несколько списков, и я хочу вернуть их в основную часть кода с теми же именами, которые используются в функции.

В следующем примере возвращается объединенный список, а затемвоссоздает отдельные списки (с теми же именами, что и в функции), разрезая составной список.

def my_function():

    # Some code which generates multiple lists

    my_list_1 = [1, 2, 3]

    my_list_2 = ['a', 'b', 'c']

    return [my_list_1, my_list_2]

    temp = my_function()

    my_list_1 = temp[0]

    my_list_2 = temp[1]

    print (my_list_1)

    print (my_list_2)

Этот подход кажется «неуклюжим» (полная функция создает около 30 списков), но я не нашел более эффективного подхода.Есть ли один?

Обучение самому питону, и это мой первый пост, поэтому, пожалуйста, будьте спокойны :).Спасибо

Ответы [ 4 ]

0 голосов
/ 22 сентября 2019

Если ваша функция возвращает много результатов, вам следует рассмотреть возможность использования namedtuple

from collections import namedtuple

def my_function():
    Results = namedtuple('Results', ['my_list_1', 'my_list_2'])
    my_list_1 = [1, 2, 3]
    my_list_2 = ['a', 'b', 'c']

    return Results(my_list_1, my_list_2)

Затем вы можете получить доступ к результатам по именам полей

>>> results = my_function()
>>> results.my_list_1
[1, 2, 3]

>>> results.my_list_2
['a', 'b', 'c']

Проверить документы на именованные кортежи

0 голосов
/ 22 сентября 2019

Посмотрите на * args и ** kwargs, если у вас есть функция return [list1, list2] Вы можете изменить код так, чтобы

list1, list2 = * my_function () и т. Д.

0 голосов
/ 22 сентября 2019

Во-первых, вам не нужно возвращать список return [my_list_1, my_list_2], а просто return my_list_1, my_list_2.Это вернет кортеж списков, это лучший способ вернуть несколько вещей (более подходящий).

Почему бы вам не использовать переменную temp напрямую для доступа к спискамвместо создания my_list_1, my_list_2 переменных?При этом вы можете вызвать вашу функцию как my_list_1, my_list_2 = your_function(), если вам это нужно.

Другой способ - вернуть dict: return { 'my_list_1': my_list_1, 'my_list_2': my_list_2 }, тогда вы можете сделать следующий фрагмент (но это полезнокогда ключи очень разнородны и не являются перечислениями, как my_list_N , в этом случае будет достаточно индекса).

returned_lists = your_function()
print(returned_lists['my_list_1'])
print(returned_lists['my_list_2'])
0 голосов
/ 22 сентября 2019

Это самый питонический способ:

my_list_1, my_list_2 = my_function()
...