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

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时,它返回一个元组,这不是我想要的。


当前回答

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

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

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

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

事实上,这正是你想要的。您所要做的就是再次分解元组。

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

只需要从元组中获取值。

最简单的方法就是拆包:

a, b = select_choice()

其他回答

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

i, card = select_choice()

你可以试试这个

class select_choice():
    return x, y

a, b = test()

你不能返回两个值,但你可以返回一个元组或一个列表,并在调用后解包:

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

my_i, my_card = select_choice()

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

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

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

or

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 select_choice():
    ...
    return [i, card]

values = select_choice()

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

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

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