Como devolver múltiplos valores de retorno numa função Python

O negócio

Em C, devolver múltiplos valores de retorno de uma função é bastante enfadonho, mas em Python, é muito fácil de fazer.

Regresso separado por vírgulas

Em Python, pode simplesmente devolver uma lista separada por vírgula de cordas ou números.

Como exemplo, definir uma função que apenas devolve uma corda e um número como se mostra abaixo, com cada um separado por uma vírgula após o retorno.

def test():
    return 'abc', 100

Em Python, os valores separados por vírgula são considerados tufos sem parênteses, excepto quando sintaticamente necessários. Portanto, a função no exemplo acima devolverá um tuple com cada valor como um elemento.

É a vírgula que cria o tuple, não os parênteses redondos. Os parênteses redondos podem ser omitidos, excepto no caso de tupples vazios ou quando necessário para evitar ambiguidade sintáctica.
Built-in Types — Python 3.10.0 Documentation

O tipo do valor de retorno é um tuple.

result = test()

print(result)
print(type(result))
# ('abc', 100)
# <class 'tuple'>

Cada elemento será do tipo definido pela função.

print(result[0])
print(type(result[0]))
# abc
# <class 'str'>

print(result[1])
print(type(result[1]))
# 100
# <class 'int'>

Erro se especificar um índice que exceda o número de valores de retorno que definiu.

# print(result[2])
# IndexError: tuple index out of range

Pode ser desempacotado e podem ser atribuídos valores múltiplos de retorno a variáveis separadas.

a, b = test()

print(a)
# abc

print(b)
# 100

O mesmo se aplica se quiser especificar três ou mais valores de retorno em vez de apenas dois.

def test2():
    return 'abc', 100, [0, 1, 2]

a, b, c = test2()

print(a)
# abc

print(b)
# 100

print(c)
# [0, 1, 2]

Devolve uma lista.

[]Se o anexar com isto, o valor de retorno será uma lista em vez de um tuple.

def test_list():
    return ['abc', 100]

result = test_list()

print(result)
print(type(result))
# ['abc', 100]
# <class 'list'>
Copied title and URL