본문 바로가기

파이썬

lambda 함수에서 여러개의 결과(값)을 반환하고자 한다면?

파이썬 일반 함수에서는 다음과 같이 복수의 값을 리턴할 수 있다.

def func(x):
    return x + 1, x + 2

func(1)

# 결과
(3, 4)

인수를 함께 호출해보면 튜플로 결과값을 반환한다.

 

그렇다면 람다 함수의 경우에는 어떻게 표현해야 할까? 단순히 위 함수처럼 나열하면 되지 않을까?

(lambda x: x + 1, x + 2)(1)

 

그래서 위와 같이 입력해보면 다음의 오류가 난다.

Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    (lambda x: x + 1, x + 2)(1)
NameError: name 'x' is not defined

 

이렇게 되는 이유를 추측해보면 람다 표현식 안에서는 괄호를 해주지 않으면 튜플로 인식하지 못하기 때문인 듯 하다.
위의 일반함수 예시에서 return을 뒤따르는 두 표현식 x+1과 x+2가 파이썬 문법에 따라 괄호 없이도 튜플이 되는 것과는 다르게 말이다.

 

괄호를 쳐주고 다시 실행해보면 정상적으로 결과가 나온다.

(lambda x: (x + 1, x + 2))(1)

# 결과
(2, 3)