답변:
한 가지 일반적인 규칙은 "_"를 무시하려는 튜플 요소의 변수 이름으로 사용하는 것입니다. 예를 들어 :
def f():
return 1, 2, 3
_, _, x = f()
x = func()[0]
첫 번째 값 x = func()[1]
을 반환하고 두 번째 값을 반환하는 데 사용할 수 있습니다 .
한 번에 여러 값을 얻으려면 다음과 같은 것을 사용하십시오 x, y = func()[2:4]
.
func()[2:4]
일부만 원하는 경우 와 같은 것을 사용할 수도 있습니다 .
_, _, _, _, _, _, _, _, _, _, _, _, _, a, _, _, _, _, _, _, _, _, _, _, _, b, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, c, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, d, _, _, _, _, _, _, _, _, e, _ = func()
함수를 여러 번 호출하는 것보다 덜 분명 하다고 생각 하지만 그건 내 의견 일뿐입니다. 함수가 많은 항목을 반환하면 numpy를 사용하는 것이 바람직하다고 생각합니다.a, b, c, d, e = func()[[13, 25, 58, 89, 98]]
result = func()
a = result[13]
b = result[25]
...
x, __, y = func()
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]
a, *_ = f()
이후에 반환되는 임의의 수의 반환 값을 무시 하는 데 사용할 수 있습니다 a
.
일반적인 관행은 _
이전에 많은 사람들이 지적한 것처럼 더미 변수 (단일 밑줄) 를 사용하는 것 입니다.
그러나 해당 변수 이름의 다른 사용 ( 이 응답 참조 ) 과의 충돌을 피하기 위해 ncoghlan이__
지적한대로 버리기 변수로 (이중 밑줄) 을 사용하는 것이 좋습니다 . 예 :
x, __ = func()
a, _, _ = 1,8,9
. 이 시점까지는 마지막으로 실행 한 명령문의 결과를 저장합니다.이 명령문은 캐치하려는 경우 일반적으로 변수를 사용하여 해당 값을 저장합니다. 이것이 바로 정크 값을 잡기 위해 제안 된 변수 이름 인 '_'입니다. 다른 명령문이 실행 된 직후 '_'값이 덮어 쓰기됩니다. '_ _'의 경우 GC가 정리할 때까지 값이 유지됩니다.
세 가지 간단한 선택.
분명한
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)
_
변수를 선호합니다 . 당신이 가치를 무시하고 있다는 것은 매우 분명합니다
x, _ = func()
끔찍하고 x = func()[0]
명백합니다. 변수에 할당 한 다음 사용하지 않습니까? 이 함수는 튜플을 반환합니다. 튜플처럼 색인합니다.
;)
과 같은 목록 접근 자는 실제로 명확하고 정식입니다. a[0]
a[:]
a[::2]
a[i:] + a[:i]
가장 좋은 해결책은 아마도 의미없는 튜플을 반환하는 대신 이름을 지정하는 것입니다. 반품 된 품목의 주문 뒤에 논리가없는 한.
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를 제공 할 수도 있습니다. 자연스럽게 나오는 질문 : 언제 파이썬에서 클래스를 사용해야합니까? .
이것은 질문에 대한 직접적인 대답이 아닙니다. 오히려이 질문에 대한 답은 "많은 옵션 중에서 특정 기능 출력을 어떻게 선택합니까?"입니다.
함수를 작성할 수있는 경우 (즉, 수정할 수없는 라이브러리에없는 경우) 함수에서 원하는 것을 나타내는 입력 인수를 추가하십시오. "일반적인 경우"에 지정할 필요조차 없도록 기본값을 가진 명명 된 인수로 만드십시오.
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 )
이 방법은 원하는 출력과 관련하여 "고급 경고"기능을 제공합니다. 결과적으로 불필요한 처리를 건너 뛰고 원하는 출력을 얻는 데 필요한 작업 만 수행 할 수 있습니다. 또한 파이썬은 동적 타이핑을하기 때문에 리턴 타입이 바뀔 수 있습니다. 예제에서 스칼라, 목록 또는 튜플을 어떻게 반환하는지 주목하십시오.
함수의 출력이 많고 여러 번 호출하지 않으려는 경우 결과를 선택하는 가장 명확한 방법은 다음과 같습니다.
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
~
특정 반환 변수를 무시하는 구문으로