Qual é a melhor maneira de retornar vários valores de uma função em Python?

votos
59

Eu tenho uma função onde eu preciso fazer alguma coisa para uma string. Eu preciso a função para retornar um booleano que indica se ou não a operação teve êxito, e eu também precisa retornar a string modificada.

Em C #, eu usaria um parâmetro de saída para a cadeia, mas não há equivalente em Python. Eu ainda sou muito novo para Python e a única coisa que posso pensar é retornar uma tupla com a corda boolean e modificado.

Questão relacionada: É Pythonic para uma função para retornar vários valores?

Publicado 01/09/2008 em 23:01
fonte usuário
Em outras línguas...                            


5 respostas

votos
118

def f(in_str):
    out_str = in_str.upper()
    return True, out_str # Creates tuple automatically

succeeded, b = f("a") # Automatic tuple unpacking
Respondeu 01/09/2008 em 23:04
fonte usuário

votos
28

Por que não lançar uma exceção se a operação não foi bem sucedida? Pessoalmente, eu tendem a ser da opinião de que se você precisar retornar mais de um valor de uma função, você deveria reconsiderar se você está fazendo as coisas da maneira certa ou usar um objeto.

Mas mais diretamente ao ponto, se você lançar uma exceção, você está forçando-os a lidar com o problema. Se você tentar retornar um valor que indica falha, é bem possível que alguém não poderia verificar o valor e acabar com alguns potencialmente difícil de depurar erros.

Respondeu 01/09/2008 em 23:09
fonte usuário

votos
15

Retornar uma tupla.

def f(x):
    # do stuff
    return (True, modified_string)

success, modified_string = f(something)
Respondeu 01/09/2008 em 23:03
fonte usuário

votos
7

Retornando uma tupla é a maneira usual de fazer isso em Python.

Respondeu 01/09/2008 em 23:03
fonte usuário

votos
3

Lançar uma exceção para o fracasso é uma boa maneira de proceder, e se você estiver retornando um monte de valores diferentes, você pode retornar uma tupla. Para o caso específico que você está citando, muitas vezes eu tomar uma posição intermédia: retornar a string modificada em caso de sucesso, e retornar Nenhum em caso de falha. Eu sou bastante de um programador C unreconstructed querer retornar um ponteiro NULL para char em caso de falha.

Se eu estivesse escrevendo uma rotina para ser usado como parte de uma biblioteca maior e consumido por outros desenvolvedores, eu lançar uma exceção em caso de falha. Quando eu estou comendo minha própria ração, eu provavelmente vou retornar diferentes tipos e teste em retorno.

Respondeu 02/09/2008 em 04:15
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more