Programing

파이썬 다중 반환 값 무시

lottogame 2020. 4. 6. 07:57
반응형

파이썬 다중 반환 값 무시


튜플에서 여러 값을 반환하는 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

반응형