본문 바로가기
Base/Python

16. 콜백함수 / map/filter 함수 / 람다 key 키워드 매개변수

by 귀멸 2023. 3. 3.

혼공파 61 ~ 63 강

1. 콜백함수 / map(), filter()

# 함수는 변수에 저장할 수 있다
def call():
  print("호출되었습니다!!")

a = call
print(a) # <function call_10_times at 0x7f99e1f5fe20>

a() # 호출되었습니다!!


# 매개변수를 함수로 입력해서 전달
# 이렇게 매개 변수로 전달하는 함수가 콜백 함수
def call_10_times(콜백함수):
  for i in range(10):
    콜백함수(i)

def print_hello(매개변수):
  print("안녕하세요!", 매개변수)

call_10_times(print_hello)


# map()
# 리스트 각각의 요소에 함수를 적용해서
# 새로운 이터레이터(리스트 비슷한 것 이후에 다룬다)를 리턴한다.
# 이터레이터 = map(함수, 리스트)

def power(숫자):
  return 숫자 ** 2

A = [1, 2, 3, 4, 5]
이터레이터 = map(power, A)
print(list(이터레이터)) # [1, 4, 9, 16, 25]

## 리스트 내포로 똑같이 구현
print([
  # 표현식
  숫자 ** 2
  # 반복문
  for 숫자 in range(1, 5 + 1)
  # 조건문
])


# filter(함수, 리스트)
# 리스트의 요소를 함수에 전달 했을 때
# 결과로 True가 나오는 녀석을 모아서
# 새로운 이터레이터를 만듦

def 홀수인가요(숫자):
  if 숫자 % 2 == 1:
    return True
  else:
    return False
  
A = [1, 2, 3, 4, 5]
이터레이터 = filter(홀수인가요, A)
print(list(이터레이터)) # [1, 3, 5]

## 리스트 내포로 똑같이 구현
print([
  # 표현식
  숫자
  # 반복문
  for 숫자 in range(1, 5 + 1)
  # 조건문
  if 숫자 % 2 == 1
])

 

# map() 직접 구현
def my_map(콜백함수, 리스트):
  output = []
  for 요소 in 리스트:
    output.append(콜백함수(요소))
  return output

def power(숫자):
  return 숫자 ** 2

A = [1, 2, 3, 4, 5]
print(my_map(power, A)) # [1, 4, 9, 16, 25]
  
# filter() 직접 구현
def my_filter(콜백함수, 리스트):
  output = []
  for 요소 in 리스트:
    if 콜백함수(요소):
      output.append(요소)
  return output

def is_odd(숫자):
  return 숫자 % 2 == 1

print(my_filter(is_odd, A)) # [1, 3, 5]

 


2. 람다 / keyword 매개변수

# 람다 : 간단한 함수를 간단하게 해주는 문법
# 간단한 리턴 값을 갖는 함수들을 쉽게 만들 수 있음
# 여러 개의 매개변수를 사용 할 수 있
# def power(숫자):
#   return 숫자 ** 2
power  = lambda 숫자: 숫자 ** 2
print(power(10))


# def is_odd(숫자):
#   return 숫자 % 2 == 1
is_odd = lambda 숫자: 숫자 % 2 == 1

# 한 줄 한에 무언가를 넣는 것 : 인라인

A = [1, 2, 3, 4, 5]
이터레이터 = map(lambda 숫자: 숫자 ** 2, A)
print(list(이터레이터))

# key 키워드 매개변수 (람다의 활용 예시)

A = [{
  "제목" : "혼자 공부하는 파이썬",
  "가격" : 18000
}, {
  "제목" : "혼자 공부하는 머신러닝 + 딥러닝",
  "가격" : 26000
}, {
  "제목" : "혼자 공부하는 자바스크립트",
  "가격" : 24000
}]

# def 가격(요소):
#   return 요소["가격"]

# print(min(A, key=가격))
# print(max(A, key=가격))

print(min(A, key=lambda 책: 책["가격"]))
print(max(A, key=lambda 책: 책["가격"]))

A.sort(key=lambda 책: 책["가격"])
print(A)

 

댓글