sourcecode

python 다중 반환 값 무시

copyscript 2022. 9. 14. 22:21
반응형

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

반응형