Bạn không thể trả về hai giá trị, nhưng bạn có thể trả về a tuple
hoặc a list
và giải nén nó sau cuộc gọi:
def select_choice():
...
return i, card # or [i, card]
my_i, my_card = select_choice()
Trên dòng return i, card
i, card
có nghĩa là tạo ra một tuple. Bạn cũng có thể sử dụng dấu ngoặc đơn như thế return (i, card)
, nhưng các bộ dữ liệu được tạo bằng dấu phẩy, vì vậy parens không bắt buộc. Nhưng bạn có thể sử dụng parens để làm cho mã của bạn dễ đọc hơn hoặc phân chia bộ dữ liệu trên nhiều dòng. Áp dụng tương tự cho dòng my_i, my_card = select_choice()
.
Nếu bạn muốn trả về nhiều hơn hai giá trị, hãy xem xét sử dụng bộ dữ liệu có tên . Nó sẽ cho phép người gọi của hàm truy cập các trường của giá trị được trả về theo tên, dễ đọc hơn. Bạn vẫn có thể truy cập các mục của bộ dữ liệu theo chỉ mục. Ví dụ trong Schema.loads
phương thức khung Marshmallow trả về a UnmarshalResult
là a namedtuple
. Vì vậy, bạn có thể làm:
data, errors = MySchema.loads(request.json())
if errors:
...
hoặc là
result = MySchema.loads(request.json())
if result.errors:
...
else:
# use `result.data`
Trong các trường hợp khác, bạn có thể trả về a dict
từ hàm của mình:
def select_choice():
...
return {'i': i, 'card': card, 'other_field': other_field, ...}
Nhưng bạn có thể muốn xem xét trả về một thể hiện của lớp tiện ích, bao bọc dữ liệu của bạn:
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)