ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python 문법 기초 19 - 일급함수와 람다함수
    Python 2022. 10. 22. 16:31

     

    # 일급함수 : 함수안에 함수, 인자로 함수 전달, 반환값이 함수
    def func1(a, b):
        return a + b
    
    func2 = func1
    print(func1(3, 4))
    print(func2(3, 4))
    
    print()
    def func3(func): # 가인수로 함수 수신 중(매개변수)
        def func4():
            print('나는 내부함수야~')
        func4()
        return func # 반환값이 함수
    
    mbc = func3(func1) # 실인자로 함수(주소) 전달!(인자)
    print(id(mbc))
    print(id(func1))
    print(mbc(3, 4))
    
    
    <console>
    7
    7
    
    나는 내부함수야~
    1685379150032
    1685379150032
    7

     

    람다함수

    print('Lambda : 축약함수, 이름이 없는 한 줄 짜리 함수')
    # 형식 : 'lambda 인자(여러개 사용가능) : 표현식'   return 없이 결과를 반환
    # def를 쓸 정도로 복잡하지 않거나, def를 적용할 수 없는 곳에 사용하면 효과적
    def Hap(x, y):
        return x + y
    
    print(Hap(1, 2))
    
    print((lambda x, y : x + y)(1, 2))
    
    g = lambda x, y: x + y
    print(g) # 람다도 함수이기때문에 주소를 출력하게 된다.
    print(g(3,4))
    
    
    <console>
    Lambda : 축약함수, 이름이 없는 한 줄 짜리 함수
    3
    3
    <function <lambda> at 0x0000018868EB6160>
    7

    간단한 함수를 축약해서 사용하기 위해 람다함수를 많이 사용한다.

     

    kbs = lambda a, su= 10:a + su
    print(kbs(5))
    print(kbs(5, 6))
    
    sbs = lambda a, *tu, **di:print(a, tu, di)
    sbs(1,2,3,m=4,n=5)
    
    
    <console>
    15
    11
    1 (2, 3) {'m': 4, 'n': 5}

     

    li = [lambda a, b : a + b, lambda a : a + 5]
    print(li[0](3, 4))
    print(li[1](3))
    
    
    <console>
    7
    8

    list 형식으로 인덱싱 해서 람다함수를 선택하여 적용시킬 수도 있다.

     

    print('어떤 함수의 인자로 람다를 사용')
    # filter(함수, 집합형자료)
    print(list(filter(lambda a : a < 5, range(10))))
    print(list(filter(lambda a : a % 2, range(10))))
    # a % 2 의 값은 나머지가 0이 되기 때문에 false로 나와서 값은 true인 홀수만 나온다.
    
    
    <console>
    어떤 함수의 인자로 람다를 사용
    [0, 1, 2, 3, 4]
    [1, 3, 5, 7, 9]

    list 타입으로 filter 함수를 호출 후 인자로 람다함수를 호출한다. 그럼 filter로 걸러진 값만 출력이된다.

     

     

    문제 1) 1 ~ 100 사이의 정수 중 5의 배수이거나 7의 배수만 걸러서 출력

    # 1 ~ 100 사이의 정수 중 5의 배수이거나 7의 배수만 걸러서 출력
    
    print(list(filter(lambda a : a % 5 == 0 or a % 7 == 0, range(1, 101))))
    
    
    for i in range(1, 101):
        if i % 5 == 0 or i % 7 == 0:
            print(i, end = ' ')
    
    
    <console>
    [5, 7, 10, 14, 15, 20, 21, 25, 28, 30, 35, 40, 42, 45, 49, 50, 55, 56, 60, 63, 65, 70, 75, 77, 80, 84, 85, 90, 91, 95, 98, 100]
    5 7 10 14 15 20 21 25 28 30 35 40 42 45 49 50 55 56 60 63 65 70 75 77 80 84 85 90 91 95 98 100

    람다 함수를 사용하여 list 타입으로 출력하는 모습을 볼 수 있다.

     

    댓글

Designed by Tistory.