함수에서 두 개의 개별 변수로 두 개의 값을 반환하고 싶습니다. 예를 들면 다음과 같습니다.
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
a가 반환 tuple
되고 이것이 내가 원하는 것이 아닙니다.
답변
두 개의 값을 반환 할 수 없지만 호출 후 a tuple
또는 a를 반환 list
하고 압축을 풀 수 있습니다.
def select_choice():
...
return i, card # or [i, card]
my_i, my_card = select_choice()
온라인 return i, card
i, card
은 튜플을 만드는 것을 의미합니다. 과 같이 괄호를 사용할 수도 return (i, card)
있지만 튜플은 쉼표로 작성되므로 괄호는 필수가 아닙니다. 그러나 parens를 사용하여 코드를 더 읽기 쉽게 만들거나 튜플을 여러 줄로 나눌 수 있습니다. line에도 동일하게 적용됩니다 my_i, my_card = select_choice()
.
세 개 이상의 값을 반환하려면 명명 된 tuple 사용을 고려하십시오 . 함수 호출자가 이름으로 리턴 된 값의 필드에 액세스 할 수있게되므로 더 읽기 쉽습니다. 여전히 색인으로 튜플의 항목에 액세스 할 수 있습니다. 예를 들어, Schema.loads
Marshmallow 프레임 워크에서는 a UnmarshalResult
를 a 로 반환 합니다 namedtuple
. 그래서 당신은 할 수 있습니다 :
data, errors = MySchema.loads(request.json())
if errors:
...
또는
result = MySchema.loads(request.json())
if result.errors:
...
else:
# use `result.data`
다른 경우에는 dict
함수에서 a 를 반환 할 수 있습니다.
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)
답변
함수에서 두 개의 개별 변수로 두 개의 값을 반환하고 싶습니다.
발신 측에서 어떤 모습 일 것으로 기대하십니까? a = select_choice(); b = select_choice()
함수를 두 번 호출하기 때문에 작성할 수 없습니다 .
값은 “변수에서”반환되지 않습니다. 그것은 파이썬이 작동하는 방식이 아닙니다. 함수는 값 (객체)을 반환합니다. 변수는 주어진 컨텍스트에서 값의 이름 일뿐입니다. 함수를 호출하고 어딘가에 반환 값을 할당하면 수행중인 작업은 호출 된 컨텍스트에서 수신 된 값에 이름을 지정하는 것입니다. 이 함수는 값을 “변수에”넣지 않고 할당을 수행합니다 (변수가 값에 대해 “저장”되지 않고 다시 이름 일 뿐이라는 것을 염두에 두지 마십시오).
내가 사용하려고하면 a를
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 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
답변
그리고 이것은 대안입니다. 목록으로 돌아 오는 경우 값을 얻는 것이 간단합니다.
def select_choice():
...
return [i, card]
values = select_choice()
print values[0]
print values[1]
답변
당신은 이것을 시도 할 수 있습니다
class select_choice():
return x, y
a, b = test()