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

我想从两个单独的variables中返回一个函数的两个值。 例如:

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

你不能返回两个值,但你可以返回一个tuplelist并在调用之后解压缩它:

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

在线return i, card i, card意味着创build一个元组。 你也可以使用括号return (i, card) ,但是元组是用逗号来创build的,所以parens不是强制的。 但是你可以使用parens来使你的代码更具可读性,或者将元组分成多行。 这同样适用于my_i, my_card = select_choice()my_i, my_card = select_choice()

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

 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, ...} 

但是您可能需要考虑返回一个实用工具类的实例,该工具包装您的数据:

 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) 

我想从两个单独的variables中返回一个函数的两个值。

你期望它在呼叫端看起来像什么? 你不能写a = select_choice(); b = select_choice() a = select_choice(); b = select_choice()因为它会调用两次函数。

值不会返回“variables”; 这不是Python的工作原理。 函数返回值(对象)。 variables只是给定上下文中的值的名称。 当你调用一个函数并在某处指定返回值时,你正在做的是在调用上下文中给出接收到的值的名字。 该函数并没有把值“变成一个variables”给你,赋值(不要介意variables不是“存储”的值,但再次,只是一个名字)。

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

其实,这正是你想要的。 你所要做的就是把这个tuple再分开。

我希望能够分别使用这些值。

所以只需从tuple取出值。

最简单的方法是解压缩:

 a, b = select_choice() 

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

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

现在你可以用你的元组来做所有你喜欢的事情。

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

 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 

这是一个替代scheme。如果你以列表forms返回,那么获取值很简单。

 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