python 다중 반환 값 무시
하나의 태플에 여러 값을 반환하는 Python 함수가 있다고 가정합니다.
def func():
return 1, 2
단순히 임시 변수에 할당하는 것이 아니라 결과 중 하나를 무시할 수 있는 좋은 방법이 있을까요?예를 들어 첫 번째 값에만 관심이 있다면 이보다 더 나은 방법이 있을까요?
x, temp = func()
사용할 수 있습니다.x = func()[0]
첫 번째 값을 반환합니다.x = func()[1]
두 번째 것을 돌려주는 것도 마찬가지고요.
한 번에 여러 값을 가져오려면 다음과 같은 방법을 사용하십시오.x, y = func()[2:4]
.
일반적인 규칙 중 하나는 무시할 태플 요소의 변수 이름으로 "_"를 사용하는 것입니다.예:
def f():
return 1, 2, 3
_, _, x = f()
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]
일반적인 방법은 더미 변수를 사용하는 것입니다._
(단일 언더스코어)는, 지금까지 많은 경우에 나타나 있듯이,
단, 변수 이름의 다른 사용(이 응답 참조)과의 충돌을 피하기 위해 다음과 같은 방법을 사용하는 것이 좋습니다.__
대신 (이중 밑줄)을 일회용 변수로 사용합니다(ncoghlan으로 지정).예:
x, __ = func()
두 개 이상의 물품을 반품할 경우, 당신은 정말로 태플을 반품하는 것입니다.다음과 같은 작업을 수행할 수 있습니다.
def func():
return 1, 2
print func()[0] # prints 1
print func()[1] # prints 2
세 가지 간단한 선택지
분명한
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
사전/태플 내의 객체가 서로 강하게 연결되어 있는 경우 해당 객체에 대한 클래스를 정의하는 것도 좋은 방법입니다.이렇게 하면 더 복잡한 작업을 정의할 수도 있습니다.다음에 나오는 자연스러운 질문은 다음과 같습니다.Python의 수업은 언제 사용해야 하나요?
최신 버전의 python( 3 3.7)에는 매우 적은 수의 코드 행으로 클래스를 정의하는 데 사용할 수 있는 데이터 클래스가 있습니다.
from dataclasses import dataclass
@dataclass
class Coordinates:
lat: float = 0
lng: float = 0
def func():
return Coordinates(lat=1, lng=2)
latitude = func().lat
named tuple에 비해 데이터클래스의 주된 장점은 확장하기 쉽다는 것이지만 다른 차이점이 있다는 것입니다.기본적으로는 데이터클래스는 변경 가능하지만@dataclass(frozen=True)
@dataclass
을 사용법
다음은 사용 사례에 적합한 데이터 클래스를 선택하는 데 도움이 될 수 있는 비디오입니다.
이게 최선의 선택인 것 같아요.
val1, val2, ignored1, ignored2 = some_function()
func() [index]메서드와 같이 애매하거나 추하지 않고, 목적을 명확하게 나타내고 있습니다.
두 인수를 , 두하지 않고 를 작성하는 이 덜 합니다.lambda
def func():
return 1, 2
func_ = lambda: func()[0]
func_() # Prints 1
이것은 그 질문에 대한 직접적인 답변이 아니다.대신, "많은 가능한 옵션에서 특정 기능의 출력을 선택하는 방법"이라는 질문에 답합니다.
함수를 쓸 수 있는 경우(즉, 변경할 수 없는 라이브러리에 없는 경우), 함수에서 원하는 것을 나타내는 입력 인수를 추가합니다."공통"의 경우 지정할 필요도 없도록 기본값을 사용하여 명명된 인수로 만듭니다.
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 )
이 방법은 원하는 출력에 대한 "고급 경고" 기능을 제공합니다.따라서 불필요한 처리를 생략하고 원하는 출력을 얻기 위해 필요한 작업만 수행할 수 있습니다.또한 Python은 동적 입력을 하기 때문에 반환 유형이 변경될 수 있습니다.이 예에서는 스칼라, 리스트 또는 태플을 반환하고 있습니다.마음대로 해!
함수의 출력이 많고 여러 번 호출하고 싶지 않은 경우 결과를 선택하는 가장 명확한 방법은 다음과 같습니다.
results = fct()
a,b = [results[i] for i in list_of_index]
최소 동작 예로서 함수가 1회밖에 호출되지 않음을 나타냅니다.
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
'sourcecode' 카테고리의 다른 글
MariaDB: 시작 후 바로 종료 (0) | 2022.09.14 |
---|---|
리액트 JSX 내부 루프 (0) | 2022.09.14 |
MySQL 빈 테이블에 가입하는 방법 (0) | 2022.09.14 |
MySQL Workbench에서 HeidiSql로 데이터베이스 연결 내보내기 (0) | 2022.09.13 |
템플릿이 없는 컴포넌트 (0) | 2022.09.13 |