1. lambda 매개변수들 : 반환식
lambda는 익명 함수로 불립니다. 익명함수란 우리가 일반적으로 함수를 사용하는 def로 함수를 선언하지 않고 함수 역할을 할 수 있는거죠
def로 함수를 선언하였을 때랑 lambda로 선언하였을 때를 매칭해보면 아래와 같습니다.
코드를 통해 lambda를 어떻게 사용하는지 아래코드를 통해 확인해보도록 하겠습니다.
# 인자에 10을 더하는 함수
def plus_ten(x):
return x + 10
print(plus_ten(1))
>>>11
# lambda를 사용하여 인자에 10을 더하기
print((lambda x : x+10)(1))
>>>11
위의 코드를 보면 알 수 있듯이 lamda는 plus_ten()과 같이 한번만 사용되는 함수를 표현할 때 주로 사용됩니다. 이렇게 한번만 사용되는 함수를 def를 통해 따로 정의해주는 것은 코드를 복잡하게 만들고 메모리를 낭비하게 하는 것입니다. 따라서 이렇게 특정 순간에만 사용되는 함수는 lambda 익명 함수를 사용하는 것이 더욱 적절합니다.
하지만 lambda 내부에서 새로운 변수를 선언하는 것은 불가합니다.(외부에 있는 변수를 사용하는건 가능합니다!) 또한 반환식은 하나의 식만 가능합니다.
#lambda 내부에서 새로운 변수 선언은 불가능
(lambda x: y = 10; x + y)(1)
>>>SyntaxError: invalid syntax
lambda는 sorted, map, filter 등 다양한 함수와 함께 사용됩니다.
sorted()
lambda가 사용되는 문제를 한번 살펴 보도록 하겠습니다. 해당 문제는 target이 주어졌을 때 공백에 상관없이 문자들의 길이에 따라 오름차순으로 정렬하는 문제입니다.
target = [' cat ', ' tiger ', ' dog', 'snake ']
# def를 사용하는 경우
def my_key(string):
return len(string.strip())
print(sorted(target, key=my_key))
# lambda를 사용하는 경우
print(sorted(target, key=lambda x : len(x.strip())))
해당 lambda함수를 해석해보면 각 리스트의 원소에대하여 len(x.strip())을 실행하고 그 결과에 따라 target을 정렬하겠다는 의미입니다.
map()
#map()과 활용
a=[1,2,3,4]
print(map(lambda x : x * 2, a))
>>>[2,4,6,8]
lambda 매개변수들 : 식1 if 조건식 else 식2
# 원소가 3의 배수라면 string으로 변환
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list(map(lambda x: str(x) if x % 3 == 0 else x, a))
>>>[1, 2, '3', 4, 5, '6', 7, 8, '9', 10]
if문을 중첩해서 사용이 가능하나 가독성이 떨어짐으로 def로 선언하여 사용하는 것이 더 좋다.
list(map(lambda x: str(x) if x % 3 == 0, a))
SyntaxError: invalid syntax
단, 반드시 if를 사용한다면 else도 함께 작성해야한다. 그렇지 않으면 오류가 난다....
filter(함수, 반복가능한객체)
filter() : 원소가 조건식 True를 만족하는 경우만 반환하고 False인 경우 버림
# 5 < 원소 < 10을 만족하는 원소만 반환
a = [8, 3, 2, 10, 15, 7, 1, 9, 0, 11]
list(filter(lambda x: x > 5 and x < 10, a))
[8, 7, 9]
참고
'파이썬' 카테고리의 다른 글
[PYTHON] zip() (0) | 2021.12.14 |
---|---|
[PYHTHON] 정규표현식 (0) | 2021.12.14 |
[PYTHON] string 관련 함수 (0) | 2021.12.11 |
[PYTHON] set() (0) | 2021.12.08 |
[PYTHON] strip([char]) (0) | 2021.12.05 |