백준 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 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가지 조건을 충족한 객체를 일컫는다.
모든 일급 객체는 변수나 데이터에 담을 수 있어야 한다.
모든 일급 객체는 함수의 파라미터로 전달 할 수 있어야 한다.
모든 일급 객체는 함수의 리턴값으로 사용 할수 있어야 한다.
add = lambda x, y: x + y
print(add(5, 3)) # 결과: 8
def apply_operation(a, b, operation):
return operation(a, b)
result = apply_operation(10, 3, lambda x, y: x * y)
print(result) # 결과: 30
def get_adder():
return lambda x, y: x + y
adder = get_adder()
print(adder(5, 3)) # 결과: 8
3조건을 만족하기 때문에 lambda는 일급 객체이다.