Я хотел бы вернуть два значения из функции в двух отдельных переменных. Например:
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
И я хочу иметь возможность использовать эти значения отдельно. Когда я пытался использовать return i, card
, он возвращает, tuple
и это не то, что я хочу.
else: continue
до возвращения заявленияОтветы:
Вы не можете вернуть два значения, но вы можете вернуть a
tuple
или alist
и распаковать его после вызова:На линии
return i, card
i, card
означает создание кортежа. Вы также можете использовать круглые скобкиreturn (i, card)
, но кортежи создаются через запятую, поэтому парены не обязательны. Но вы можете использовать парены, чтобы сделать ваш код более читабельным или разбить кортеж на несколько строк. То же самое относится и к линииmy_i, my_card = select_choice()
.Если вы хотите вернуть более двух значений, рассмотрите возможность использования именованного кортежа . Это позволит вызывающей функции получить доступ к полям возвращаемого значения по имени, которое более читабельно. Вы по-прежнему можете получить доступ к элементам кортежа по индексу. Например, в
Schema.loads
методе Marshmallow Framework возвращает a,UnmarshalResult
который является anamedtuple
. Так что вы можете сделать:или
В других случаях вы можете вернуть
dict
из вашей функции:Но вы можете рассмотреть возможность возврата экземпляра служебного класса, который упаковывает ваши данные:
источник
Как вы ожидаете, что это будет выглядеть на вызывающей стороне? Вы не можете написать,
a = select_choice(); b = select_choice()
потому что это вызвало бы функцию дважды.Значения не возвращаются "в переменных"; это не то, как работает Python. Функция возвращает значения (объекты). Переменная - это просто имя для значения в данном контексте. Когда вы вызываете функцию и присваиваете возвращаемое значение где-то, вы делаете, что присваиваете полученному значению имя в контексте вызова. Функция не помещает значение «в переменную» для вас, присваивание делает (не говоря уже о том, что переменная не является «хранилищем» для значения, но опять же, просто имя).
На самом деле, это именно то, что вы хотите. Все, что вам нужно сделать, это
tuple
снова разобрать.Так что просто возьмите значения из
tuple
.Самый простой способ сделать это - распаковать:
источник
Я думаю, что ты хочешь, это кортеж. Если вы используете
return (i, card)
, вы можете получить эти два результата:источник
Теперь вы можете делать все, что вам нравится с вашим кортежем.
источник
источник
И это альтернатива. Если вы возвращаетесь в виде списка, то получить значения просто.
источник
ты можешь попробовать это
источник
Вы также можете вернуть более одного значения, используя список. Проверьте код ниже
источник