익명 함수 lambda 그리고 일급 객체

유경우·2024년 3월 14일
0

CS

목록 보기
17/21
post-custom-banner


백준 1181번 문제

간단한 문자 정렬 문제이다.

import sys

input = sys.stdin.readline

N = int(input())

words = [input().strip() for _ in range(N)]

# print(words)

words = list(set(words))

words.sort()
words.sort(key = lambda x: len(x))

# print(words)


for word in words:
  print(word)

이렇게 해결하였다.

그런데 해결하고 보니
그냥 알고만 있던 람다의 정체가 궁금해졌다.

lambda란?

람다 표현식은 (때로 람다 형식(lambda forms)이라고 불립니다) 이름 없는 함수를 만드는 데 사용됩니다. 표현식 lambda parameters: expression 는 함수 객체를 줍니다. 이 이름 없는 객체는 이렇게 정의된 함수 객체처럼 동작합니다:

주로 함수를 간단하게 표현할 때 사용한다.

lambda arguments: expression

람다의 기본적인 표현식은 이렇게 되는데

처음에는 lambda가 int, str 변수를 지정할때랑 비슷하게 생겨서
데이터 타입인줄 알았다.

Java의 Object 타입처럼 어느 데이터가 와도 표현식에 맞게 변경해주는 그런 편리한 녀석인줄

그런데 그러면 "=" 이 필요한데 람다의 표현식에는 ":"이 들어있다.

def Linkedlist():

파이썬에서 ":"은 함수를 정의 할 때 쓰는걸로 알고있는데
그렇다면 lambda는 함수인가? 하고 문서를 찾아보았다.


출처 : https://docs.python.org/ko/3/reference/expressions.html#lambda

이게 원래의 lambda 함수이고 우리가 주로 사용하는 건 축약식이었다.
그리고 이 문서를 찾다 보니 일급 객체라는 개념이 등장했다.

일급 객체란?

일급 객체는 사용할 때 다른 요소들과 아무런 차별이 없다는 것을 뜻한다.

그리고 보통 일급 객체를 아래 3가지 조건을 충족한 객체를 일컫는다.

모든 일급 객체는 변수나 데이터에 담을 수 있어야 한다.
모든 일급 객체는 함수의 파라미터로 전달 할 수 있어야 한다.
모든 일급 객체는 함수의 리턴값으로 사용 할수 있어야 한다.

1. 변수에 할당될 수 있어야 한다.

add = lambda x, y: x + y
print(add(5, 3))  # 결과: 8

2. 함수의 인자로 전달될 수 있어야 한다.

def apply_operation(a, b, operation):
    return operation(a, b)

result = apply_operation(10, 3, lambda x, y: x * y)
print(result)  # 결과: 30

3. 함수의 반환값이 될 수 있어야 한다.

def get_adder():
    return lambda x, y: x + y

adder = get_adder()
print(adder(5, 3))  # 결과: 8

출처 : https://inpa.tistory.com/entry/CS-%F0%9F%91%A8%E2%80%8D%F0%9F%92%BB-%EC%9D%BC%EA%B8%89-%EA%B0%9D%EC%B2%B4first-class-object

3조건을 만족하기 때문에 lambda는 일급 객체이다.

profile
개발자
post-custom-banner

0개의 댓글