61 - (파이썬) 콜백함수, map/filter 함수
#콜백함수
: 매개변수로 전달하는 함수를 (정확하게는 내가 아닌 다른 놈이 로출하는 함수) 콜백함수 라고 한다
# 함수를 변수에 저장하기
def ctt():
pass
v = ctt()
print(v)
>>> None
→ ctt라는 함수를 만들고, v라는 변수에 함수를 괄호까지 넣은 다음 출력을 하게 되면 ctt라는 함수가 아무것도 return하고 있지 않기 때문에 None을 return하는 것을 볼 수 있다.
그런데 이렇게 함수를 호출하는 것이 아니라 v라는 변수에 함수를 (괄호를 제외하고) 넣은 다음 실행하면
def ctt():
pass
v = ctt
print(v)
>>> <function ctt at 0x7ab1067a7f40>
변수 v에 ctt라는 함수가 들어있는 것을 확인할 수 있다.
따라서 변수 v를 호출할 때 ctt를 호출하는 것을 볼 수 있다.
def ctt():
print("ctt가 호출되었습니다.")
v = ctt
print(v)
v()
>>>
<function ctt at 0x713dc2553f40>
ctt가 호출되었습니다.
# 함수를 매개변수로 전달하기
def c_10_t(함수) :
# 함수 = pr_hi가 들어오고 그것을 호출했기 때문에
함수()
def pr_hi():
print("hi there")
#매개변수를 함수로 입력해서 전달
c_10_t(pr_hi)
>>>
hi there
파이썬 튜터로 보면 이런거
이름대로 10번 호출하도록 수정하면
def c_10_t(함수) :
# 함수 = pr_hi가 들어오고 그것을 호출했기 때문에
for i in range(10) :
함수()
def pr_hi():
print("hi there")
#매개변수를 함수로 입력해서 전달
c_10_t(pr_hi)
>>>
hi there
hi there
hi there
hi there
hi there
hi there
hi there
hi there
hi there
hi there
: 그래서 매개변수로 전달하는 함수를 (정확하게는 내가 아닌 다른 놈이 로출하는 함수) 콜백함수 라고 한다.
# 콜백함수에 매개변수 전달하기
def c_10_t(cbfun) :
# 함수 = pr_hi가 들어오고 그것을 호출했기 때문에
for i in range(10) :
cbfun(i)
def pr_hi(매개):
print("hi there",매개)
#매개변수를 함수로 입력해서 전달
c_10_t(pr_hi)
>>>
hi there 0
hi there 1
hi there 2
hi there 3
hi there 4
hi there 5
hi there 6
hi there 7
hi there 8
hi there 9
드디어 나왔구나...! map 함수
# map()
: 첫 번째 매개변수로 함수를 받고 두 번째 매개변수로 리스트를 받는다. 그리고 최종적으로는 이터레이터라는 것을 return하게 된다.
: 각각의 요소에 함수를 적용해서 새로운 리스트(이터레이터)로 리턴한다.
이터레이터는 일단 리스트 비끄므리라고 생각하면 됩니당. 이터레이터는 "파이썬 매일 코딩"이라는 책을 참고하라고 하는디 다음 책으로...?
def power(num):
return num**2
liszt = [0, 1,2,3,4,5]
이터레이터 = map(power,liszt)
print(list(이터레이터))
>>>
[0, 1, 4, 9, 16, 25]
기억나니 리스트내포...
def pwr(numb):
return numb**2
print([
#표현식
numb**2
#반복문
for numb in range(1,10+1)
#조건문
])
>>>
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# filter()
: 첫 번째 매개변수로 함수를 받고 두 번째 매개변수로 리스트를 받는다. 그리고 최종적으로는 이터레이터라는 것을 return하게 된다.
: 리스트의 요소를 함수에 전달했을 때 결과로 True가 나오는 녀석을 모아서 새로운 리스트(이터레이터)를 만듦
def 홀수만(nb) :
if nb%2 == 1:
return True
else :
return False
l = [1,2,3,4,5,6]
iterator = filter(홀수만,l)
print(list(iterator))
>>>
[1, 3, 5]
기억나니 리스트내포...
def on(number):
return number
print([
#표현식
number
#반복문
for number in range(1,10+1)
#조건문
if number%2 == 1
])
>>>
[1, 3, 5, 7, 9]