Eu gostaria de retornar dois valores de uma função em duas variáveis separadas. Por exemplo:
def select_choice():
loop = 1
row = 0
while loop == 1:
print('''Choose from the following options?:
1. Row 1
2. Row 2
3. Row 3''')
row = int(input("Which row would you like to move the card from?: "))
if row == 1:
i = 2
card = list_a[-1]
elif row == 2:
i = 1
card = list_b[-1]
elif row == 3:
i = 0
card = list_c[-1]
return i
return card
E eu quero poder usar esses valores separadamente. Quando tentei usar return i, card
, ele retornou um tuple
e não é isso que eu quero.
else: continue
antes das declarações de retornoRespostas:
Você não pode retornar dois valores, mas pode retornar a
tuple
ou alist
e descompactá-lo após a chamada:On-line
return i, card
i, card
significa criar uma tupla. Você também pode usar parênteses comoreturn (i, card)
, mas as tuplas são criadas por vírgula; portanto, parênteses não são obrigatórias. Mas você pode usar parens para tornar seu código mais legível ou para dividir a tupla em várias linhas. O mesmo se aplica à linhamy_i, my_card = select_choice()
.Se você deseja retornar mais de dois valores, considere usar uma tupla nomeada . Isso permitirá que o chamador da função acesse campos do valor retornado pelo nome, o que é mais legível. Você ainda pode acessar itens da tupla pelo índice. Por exemplo, no
Schema.loads
método Marshmallow framework retorna aUnmarshalResult
que é anamedtuple
. Então você pode fazer:ou
Noutros casos, pode devolver a
dict
da sua função:Mas você pode considerar retornar uma instância de uma classe de utilitário, que agrupa seus dados:
fonte
Como você esperaria que isso acontecesse? Você não pode escrever
a = select_choice(); b = select_choice()
porque isso chamaria a função duas vezes.Os valores não são retornados "em variáveis"; não é assim que o Python funciona. Uma função retorna valores (objetos). Uma variável é apenas um nome para um valor em um determinado contexto. Quando você chama uma função e atribui o valor de retorno em algum lugar, o que você está fazendo é atribuir um nome ao valor recebido no contexto da chamada. A função não coloca o valor "em uma variável" para você, a atribuição faz (não importa que a variável não seja "armazenamento" para o valor, mas, novamente, apenas um nome).
Na verdade, é exatamente o que você quer. Tudo o que você precisa fazer é
tuple
desmontar novamente.Então, basta pegar os valores fora do
tuple
.A maneira mais fácil de fazer isso é descompactar:
fonte
Eu acho que você o que você quer é uma tupla. Se você usar
return (i, card)
, poderá obter esses dois resultados:fonte
agora você pode fazer tudo o que quiser com sua tupla.
fonte
fonte
E esta é uma alternativa. Se você está retornando como lista, é simples obter os valores.
fonte
você pode tentar isso
fonte
Você pode retornar mais de um valor usando a lista também. Verifique o código abaixo
fonte