udemy.py_Section 6 - (8) Lambda Expressions Map and Filter

Gomi_kery·2022년 9월 18일
0

udem.py

목록 보기
27/28
post-thumbnail

Map

  • 문제 풀이 과정에서 사용했던 함수. (정리했던 내용)
  • map(func, *iterables) 단독으로는 사용할 수 없으며 사용 시 iterate 해야함.
# 제곱을 구하는 함수
def squar_num(num):
	return num**2
  • 숫자로 된 리스트에 제곱 함수를 사용하려면
    for 문을 사용할 수 있지만 map() 함수를 사용하면 쉽게 결과를 구할 수 있음.
a = [4,5,6]

for item in map(squar_num,a):
	print(item)
> 16
25
36

list(map(squar_num,a))
> [16,25,36]
  • map()에 함수를 사용할 때에는 괄호 없이 인자처럼 함수명만 입력해야함
  • 만약 함수에 괄호를 사용할 경우 TypeError가 발생

Filter

  • 항목을 함수에 입력할 때, True이기 때문에 iterable한 항목을 만드는 iterator를 반환.
  • True 나 False로 반환하는 함수를 사용해야함.
  • map()과 마찬가지로 filter(function or None, iterable) 함수를
    단독으로 사용할 수 없으며 사용 시 iterate 해야함.
# 짝수를 체크하는 함수
def check_num(my_num):
	return my_num%2 == 0
n1 = [2,3,4,5]
# 쩍수 결과만 확인
for items in filter(check_num,n1):
	print(items)
> 2
4

# 짝수 결과를 리스트로 반환이 필요할 때
list(filter(check_num,n1))
> [2,4]

Lambda 표현식

  • 함수의 이름을 붙이지 않기 때문에 익명 함수라고 불림.
  • 단 "1"번만 사용하며, 사용 후 참조도 하지 않음.
  • 모든 단일 함수를 람다 표현식으로 변경할 수는 없음.
  • 일반적으로 map(), filter()의 function 부분에 사용.

Lambda 표현식 만드는 법

1. 일반적인 함수 생성

def square(num):
	result = num ** 2
    return result
    
square(5)
> 25

2. 결과 변수 제거 후 한줄로 표현

def square(num): return num ** 2

3. 'def' 키워드, reurn 제거하고 앞에 lambda 입력

  • 1번만 사용할 것이기 때문에 def 함수명 미사용.
  • lambda 옆의 ':' 은 무조건 반환하기 때문에 return 제거.
lambda num: num ** 2

square = lambda num: num ** 2

map() ▶ lambda

  • 위에서 사용했던 map() 함수/사용
a = [4,5,6]

def squar_num(num):
	return num**2

list(map(squar_num,a))

# 람다로 변경/사용
list(map(lambda num:num**2,a))
> [16, 25, 36]
names = ['Thrall','Sylvanas','Jaina']

# 문자열 리스트의 앞글자 따오기
list(map(lambda n : n[0],names))

filter() ▶ lambda

  • 위 에서 사용했던 filter() 함수/사용
a = [4,5,6]

def check_num(my_num):
	return my_num%2 == 0

list(filter(check_num,a))

# 람다로 변경/사용
list(filter(lambda my_num:my_num%2 == 0,a))
> [4,6]
profile
QA. 손으로 할 수 있는 모든 것을 좋아합니다.

0개의 댓글