ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 61 - (파이썬) 콜백함수, map/filter 함수
    study with Q - 파이썬 2024. 7. 1. 21:20

    #콜백함수

    : 매개변수로 전달하는 함수를 (정확하게는 내가 아닌 다른 놈이 로출하는 함수) 콜백함수 라고 한다

    # 함수를 변수에 저장하기

    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]

     


    https://replit.com/@wh3308/fun-and-var

Designed by Tistory.