如何从Python函数中返回两个值?

我想从两个独立变量的函数中返回两个值。 例如:< / p >

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,这不是我想要的。

450747 次浏览

我想你想要的是一个元组。如果你使用return (i, card),你可以通过以下方式得到这两个结果:

i, card = select_choice()

不能返回两个值,但可以返回tuplelist并在调用后解包:

def select_choice():
...
return i, card  # or [i, card]


my_i, my_card = select_choice()

在第return i, cardi, card表示创建一个元组。你也可以像return (i, card)一样使用圆括号,但是元组是由逗号创建的,所以圆括号不是强制性的。但是您可以使用paren使您的代码更具可读性,或者将元组分割为多行。这同样适用于第my_i, my_card = select_choice()行。

如果你想返回两个以上的值,考虑使用叫元组。它将允许函数的调用者通过名称访问返回值的字段,这样可读性更强。您仍然可以通过索引访问元组的项。例如,在Schema.loads方法中,Marshmallow framework返回UnmarshalResult,它是namedtuple。所以你可以这样做:

data, errors = MySchema.loads(request.json())
if errors:
...

result = MySchema.loads(request.json())
if result.errors:
...
else:
# use `result.data`

在其他情况下,你可以从你的函数返回dict:

def select_choice():
...
return {'i': i, 'card': card, 'other_field': other_field, ...}

但你可能想要考虑返回一个实用程序类的实例(或Pydantic/dataclass模型实例),它包装了你的数据:

class ChoiceData():
def __init__(self, i, card, other_field, ...):
# you can put here some validation logic
self.i = i
self.card = card
self.other_field = other_field
...


def select_choice():
...
return ChoiceData(i, card, other_field, ...)


choice_data = select_choice()
print(choice_data.i, choice_data.card)
def test():
....
return r1, r2, r3, ....


>> ret_val = test()
>> print ret_val
(r1, r2, r3, ....)

现在您可以对元组做任何您喜欢的事情。

我想从两个独立变量的函数中返回两个值。

你认为通话端会是什么样子?你不能写a = select_choice(); b = select_choice(),因为那样会调用函数两次。

值不会“在变量中”返回;Python不是这样工作的。函数返回值(对象)。变量只是给定上下文中值的名称。当您调用一个函数并将返回值赋给某个位置时,您所做的就是在调用上下文中为接收到的值指定一个名称。函数不会为你将值“放入一个变量”,而是赋值操作(不用担心变量不是值的“存储”,但同样,只是一个名称)。

当我试图使用return i, card时,它返回一个tuple,这不是我想要的。

事实上,这正是你想要的。你所要做的就是再次将tuple拆开。

我希望能够单独使用这些值。

所以只要从tuple中获取值。

最简单的方法就是拆包:

a, b = select_choice()

使用list也可以返回多个值。检查下面的代码

def newFn():    #your function
result = []    #defining blank list which is to be return
r1 = 'return1'    #first value
r2 = 'return2'    #second value
result.append(r1)    #adding first value in list
result.append(r2)    #adding second value in list
return result    #returning your list


ret_val1 = newFn()[1]    #you can get any desired result from it
print ret_val1    #print/manipulate your your result

这是另一种选择。如果你返回作为列表,那么它很容易得到的值。

def select_choice():
...
return [i, card]


values = select_choice()


print values[0]
print values[1]
def test():
r1 = 1
r2 = 2
r3 = 3
return r1, r2, r3


x,y,z = test()
print x
print y
print z




> test.py
1
2
3

你可以试试这个

class select_choice():
return x, y


a, b = test()