공부중

[python] lamda 표현식 본문

프로그래밍/파이썬 Python

[python] lamda 표현식

복습 2024. 7. 29. 20:49
728x90

 

1. lamda 기초

lambda areguments: expression

 

lambda : 람다 함수를 정의 

areguments: 함수의 입력 인자, x, y, z와 같이 여러개를 넣을 수 있다. 

expression : 인사를 사용하는 표현식. 표현식의 결과가 함수의 반환 값이 된다. 

 

 

람다 표현식은 이름이 없는 함수를 만든다 -> 익명 함수

 

예를 들어 x + y에 대한 함수를 만들면 다음과 같다. 

def func_plus(x, y):
    return x + y

 

람다 표현식을 쓰면 다음과 같다. 

lambda x, y: x + y

 

람다 표현식을 변수에 할당해서 사용할 수도 있지만 람다 표현식 자체를 바로 사용할 수도 있다.

(lambda 입력매개변수: 출력식)(인수)
(lambda x, y: x + y)(1, 2)    # 출력 3

 

 

람다 표현식 안에서는 변수를 만들 수 없지만 람다 표현식 바깥에 있는 변수는 사용할 수 있다. 

 

 

2. map

반복 가능한 객체의 각 요소를 함수에 전달하고 함수를 통과한 모든 요소의 결과를 반환하는 것

map(func, *iterables)

 

func : 각 요소에 적용할 함수 

iterables: 함수를 적용할 데이터 집합 

 

지금까지 많이 쓰던 예시 

srt_list = ['1', '2', '3']
int_lst = list(map(int, srt_list))

print(int_lst)

 

func에는 int말고도, add, str.upper 등을 사용할 수 있을 것이다. 

 

 

 

3. 조건식 사용하기

lambda 입력매개변수: 식1 if 조건식 else 식2

 

조건식을 만족하면 식 1에 대한 값 출력. 아닐경우 식2에 대한 값 출력 

elif는 사용하지 못하며 if를 사용할 경우 무조건 else를 같이 사용해야 한다. 

하지만 if 조건식을 여러개 사용할 수는 있다. 

 

lambda 입력매개변수: 식1 if 조건식1 else 식2 if 조건식2 else 식3

조건 식1이 아닌 경우 else에 대한 조건문을 붙이는 느낌으로 이해

 

 

 

 

 

4. filter

함수가 부울 값(True, False)을 반환하도록 하고 반복가능한 객체(iterable)의 각 요소를 함수에 전달. 

즉, 논리에 거짓인 요소를 필터링하게 된다. 

 

filter(func, iterable)

 

 

map는 여러 iterable을 받을 수 있는 반면 filter는 단 하나의 iterable만 사용할 수 있다. 

그러니까 map는 여러 리스트를 받을 수 있는데 filter는 하나의 리스트에대해서만 처리하게 된다. 그래서 map부분에서는 

*iterable로 표시했던 것.

 

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Using a lambda function to check if numbers are even
even_numbers = filter(lambda x: x % 2 == 0, numbers)

# Converting the filter object to a list and printing it
print(list(even_numbers))  # This will output: [2, 4, 6, 8, 10]

 

 

 

5. reduce

reduce(func, iterable[, initial])

 

시퀀스의 요소들을 누적적으로 특정함수에 적용하여 하나의 값으로 줄인다. 

- 함수(Function): 두 개의 인자를 받아 하나의 값으로 결합하는 함수
- 시퀀스(Sequence): 누적 적용될 시퀀스
- 초기값(Initializer): 선택적으로 추가하면 된다. 

 

 

reduce는 파이썬 3부터는 내장함수가 아니므로 functools에서 가져와야 한다. 

 

 

 

 

 

 

728x90