[python] 파이썬 다중 반환 값 무시

튜플에서 여러 값을 반환하는 Python 함수가 있다고 가정 해보십시오.

def func():
    return 1, 2

임시 변수에 할당하는 대신 결과 중 하나를 무시하는 좋은 방법이 있습니까? 첫 번째 가치에만 관심이 있다면 이것보다 더 좋은 방법이 있습니까?

x, temp = func()



답변

한 가지 일반적인 규칙은 “_”를 무시하려는 튜플 요소의 변수 이름으로 사용하는 것입니다. 예를 들어 :

def f():
    return 1, 2, 3

_, _, x = f()


답변

x = func()[0]첫 번째 값 x = func()[1]을 반환하고 두 번째 값을 반환하는 데 사용할 수 있습니다 .

한 번에 여러 값을 얻으려면 다음과 같은 것을 사용하십시오 x, y = func()[2:4].


답변

Python 3을 사용하는 경우 변수 왼쪽의 별 앞에 별을 사용하여 포장 풀기 목록으로 만들 수 있습니다.

# Example 1: a is 1 and b is [2, 3]

a, *b = [1, 2, 3]

# Example 2: a is 1, b is [2, 3], and c is 4

a, *b, c = [1, 2, 3, 4]

# Example 3: b is [1, 2] and c is 3

*b, c = [1, 2, 3]

# Example 4: a is 1 and b is []

a, *b = [1]


답변

둘 이상의 항목을 반환하면 실제로 튜플을 반환한다는 것을 기억하십시오. 따라서 다음과 같은 작업을 수행 할 수 있습니다.

def func():
    return 1, 2

print func()[0] # prints 1
print func()[1] # prints 2


답변

일반적인 관행은 _이전에 많은 사람들이 지적한 것처럼 더미 변수 (단일 밑줄) 를 사용하는 것 입니다.

그러나 해당 변수 이름의 다른 사용 ( 응답 참조 ) 과의 충돌을 피하기 위해 ncoghlan이__ 지적한대로 버리기 변수로 (이중 밑줄) 을 사용하는 것이 좋습니다 . 예 :

x, __ = func()


답변

세 가지 간단한 선택.

분명한

x, _ = func()

x, junk = func()

끔찍한

x = func()[0]

그리고 데코레이터로 이것을 수행하는 방법이 있습니다.

def val0( aFunc ):
    def pick0( *args, **kw ):
        return aFunc(*args,**kw)[0]
    return pick0

func0= val0(func)


답변

가장 좋은 해결책은 아마도 의미없는 튜플을 반환하는 대신 이름을 지정하는 것입니다. 반품 된 품목의 주문 뒤에 논리가없는 한.

def func():
    return {'lat': 1, 'lng': 2}

latitude = func()['lat']

반환하는 것에 대한 추가 정보를 추가하려는 경우 namedtuple을 사용할 수도 있습니다 (사전이 아니라 좌표입니다).

from collections import namedtuple

Coordinates = namedtuple('Coordinates', ['lat', 'lng'])

def func():
    return Coordinates(lat=1, lng=2)

latitude = func().lat

사전 / 튜플 내의 객체가 서로 밀접하게 연결되어 있으면 클래스를 정의하는 것이 좋습니다. 그렇게하면이 유형의 객체 사이의 상호 작용을 정의하고 해당 객체를 사용하는 방법에 대한 API를 제공 할 수도 있습니다. 자연스럽게 나오는 질문 : 언제 파이썬에서 클래스를 사용해야합니까? .