파이썬 다중 반환 값 무시
튜플에서 여러 값을 반환하는 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']
print(latitude)
돌아 오는 것에 대한 추가 정보를 추가하려는 경우 namedtuple을 사용할 수도 있습니다 .
from collections import namedtuple
Coordinates = namedtuple('Coordinates', ['lat', 'lng'])
def func():
return Coordinates(lat=1, lng=2)
latitude = func().lat
print(latitude)
돌아 오는 것들이 종종 함께 있으면 클래스를 정의하는 것이 좋습니다.
이것은 나에게 최고의 선택 인 것 같습니다.
val1, val2, ignored1, ignored2 = some_function()
그것은 func () [index] 메소드와 같이 비밀 스럽거나 추악하지 않으며 목적을 명확하게 나타냅니다.
이것은 질문에 대한 직접적인 대답이 아닙니다. 오히려이 질문에 대한 답은 "많은 옵션 중에서 특정 기능 출력을 어떻게 선택합니까?"입니다.
함수를 작성할 수있는 경우 (즉, 수정할 수없는 라이브러리에없는 경우) 함수에서 원하는 것을 나타내는 입력 인수를 추가하십시오. "일반적인 경우"에 지정할 필요조차 없도록 기본값을 가진 명명 된 인수로 만드십시오.
def fancy_function( arg1, arg2, return_type=1 ):
ret_val = None
if( 1 == return_type ):
ret_val = arg1 + arg2
elif( 2 == return_type ):
ret_val = [ arg1, arg2, arg1 * arg2 ]
else:
ret_val = ( arg1, arg2, arg1 + arg2, arg1 * arg2 )
return( ret_val )
이 방법은 원하는 출력과 관련하여 "고급 경고"기능을 제공합니다. 결과적으로 불필요한 처리를 건너 뛰고 원하는 출력을 얻는 데 필요한 작업 만 수행 할 수 있습니다. 또한 파이썬은 동적 타이핑을하기 때문에 리턴 타입이 바뀔 수 있습니다. 예제에서 스칼라, 목록 또는 튜플을 어떻게 반환하는지 주목하십시오.
이것이 항상 사용하지만 항상 두 번째 인수를 버리는 함수 인 경우을 사용하여 두 번째 반환 값없이 함수의 별칭을 만드는 것이 덜 지루하다고 주장합니다 lambda
.
def func():
return 1, 2
func_ = lambda: func()[0]
func_() # Prints 1
함수의 출력이 많고 여러 번 호출하지 않으려는 경우 결과를 선택하는 가장 명확한 방법은 다음과 같습니다.
results = fct()
a,b = [results[i] for i in list_of_index]
최소 작업 예제로서 함수가 한 번만 호출됨을 보여줍니다.
def fct(a):
b=a*2
c=a+2
d=a+b
e=b*2
f=a*a
print("fct called")
return[a,b,c,d,e,f]
results=fct(3)
> fct called
x,y = [results[i] for i in [1,4]]
그리고 값은 예상대로입니다 :
results
> [3,6,5,9,12,9]
x
> 6
y
> 12
편의를 위해 Python 목록 색인을 사용할 수도 있습니다.
x,y = [results[i] for i in [0,-2]]
결과 : a = 3 및 b = 12
참고 URL : https://stackoverflow.com/questions/431866/ignore-python-multiple-return-value
'Programing' 카테고리의 다른 글
PG :: ConnectionBad-서버에 연결할 수 없습니다 : 연결이 거부되었습니다 (0) | 2020.04.06 |
---|---|
기기가 스마트 폰 또는 태블릿인지 확인 하시겠습니까? (0) | 2020.04.06 |
jQuery AJAX 호출 결과의 브라우저 캐싱 방지 (0) | 2020.04.06 |
리눅스 커널은 어떻게 테스트됩니까? (0) | 2020.04.06 |
단위 테스트를 처음 사용하는 경우 훌륭한 테스트를 작성하는 방법은 무엇입니까? (0) | 2020.04.06 |