튜플에서 여러 값을 반환하는 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를 제공 할 수도 있습니다. 자연스럽게 나오는 질문 : 언제 파이썬에서 클래스를 사용해야합니까? .