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

StackOverflow https://stackoverflow.com/questions/38508

  •  09-06-2019
  •  | 
  •  

Pergunta

Eu tenho uma função onde eu preciso fazer alguma coisa para uma seqüência de caracteres.Eu preciso que a função retorne um valor booleano indicando se a operação foi bem-sucedida, e eu também preciso voltar a seqüência modificada.

Em C#, gostaria de usar 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 coleção de itens com o valor booleano e seqüência modificada.

Perguntas relacionadas: É pythonic para uma função para retornar vários valores?

Foi útil?

Solução

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

succeeded, b = f("a") # Automatic tuple unpacking

Outras dicas

Por que não lançar uma exceção se a operação não foi bem-sucedida?Pessoalmente, eu tendem a ser de opinião de que se você precisa retornar mais de um valor de uma função, você deve considerar que 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, é muito bem possível que alguém não poderia verificar o valor e acabar com alguns potencialmente difícil de depuração de erros.

Retorno de uma tupla.

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

success, modified_string = f(something)

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

Lançando uma exceção para o fracasso é uma boa maneira de proceder, e se você está voltando de um monte de diferentes valores, você pode retornar uma tupla.Para o caso específico que você está citando, eu, muitas vezes, tomar uma abordagem intermediária:retornar a seqüência modificada em caso de sucesso, e Nenhum retorno em caso de falha.Eu sou suficiente de uma unreconstructed C programador deseja retornar um ponteiro NULO para char em caso de falha.

Se eu fosse escrever uma rotina para ser usado como parte de uma grande biblioteca e consumido por outros desenvolvedores, eu gostaria de lançar uma exceção em caso de falha.Quando eu estou comendo a minha própria ração para cachorro, eu provavelmente vou voltar a diferentes tipos de teste e no retorno.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top