如何从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
,这不是我想要的。
你不能返回两个值,但你可以返回一个tuple
或list
并在调用之后解压缩它:
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.loads
的UnmarshalResult
。 所以你可以这样做:
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