Генерация переменных для возврата
Я должен вернуть много переменных из моей функции:
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: возврат кортежа или списка?