Генерация переменных для возврата

Я должен вернуть много переменных из моей функции:

a = 5
b = 6
c = 8
d = 6
...
return a,b,c,d,e,f,g,h

Проблема в том, что я хотел бы сделать это через массив, чтобы сохранить строки кода:

for (...):
  ar[x] = ... # For x = a,b,c,d,e, ...

Но я должен возвращать переменные в формате "return a, b, c, d, e", и я не хочу записывать это как:

return ar[a], ar[b], ar[c], ...

Так я могу использовать генератор для этого и как? Что-то вроде:

return item for item in len(ar)

4 ответа

Решение

Когда вы "возвращаете несколько переменных", вы на самом деле просто возвращаете кортеж. Вы можете сделать это:

return tuple(ar)

или даже

return ar

Предполагая, конечно, что ваш массив содержит все, что вы хотите вернуть в правильном порядке, и только это.

Было бы неплохо увидеть больше кода, но вполне вероятно, что если вы можете заполнить этот список с помощью цикла, то в любом случае это семантически одно значение (однородная коллекция).

Вы можете сделать это:

def func(x):
    # do something
    lis = (#your values)
    return lis
a,b,c,d,e = func(x)

Это вернет значения в виде кортежа и будет распаковано на другом конце

def values():
    a = 3
    b = 5
    c = 9
    d = 3
    e = 5

    return(a, b, c, d, e)

a1 = values()
print list(a1)

и вы можете редактировать вышеупомянутую функцию, чтобы вернуть кортеж переменных

tuple(a,b,c,d,e) 

Используйте выражение генератора и tuple:

return tuple(ar[x] for x in (a,b,c,d,e))

Если индексы непрерывны, вы можете использовать нарезку:

return tuple(ar[2:8])   #If `ar` is a already a tuple then remove the tuple call

Если вы хотите вернуть весь кортеж / список, просто верните его как есть:

return ar   #or return tuple(ar)

Обратите внимание, что возвращение tuple не является обязательным, более подробно об этом здесь: Python: возврат кортежа или списка?

Другие вопросы по тегам