ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 63 - (파이썬) 람다, key 키워드 매개변수
    study with Q - 파이썬 2024. 7. 3. 20:16

    # 람다 (lambda)

    : aka 간단한 함수를 간단하게 작성할 수 있게 해주는 문법

    : 매개변수로 함수를 전달하기 위해 함수 구문을 작성하는 것이 번거로울 때 함수를 간단하게 선언하는 방법. 1회용 함수를 만들어야 할 때 주로 사용한다.

     

    def square(number): 
    	return number**2
    
    def is_even(숫자아): 
    	return 숫자아 % 2 == 0

     

    위에서와 같이 굳이 저 간단한 함수 쓰겠다고 두 줄이나 소모하며 쓰는 것이며.. 모양새며 영 보기가 거시기혀.

    그래서 한 줄의 return코드를 가지는 함수를 간단하게 하는 함수를 만듦 → 그게 바로 람다(lambda) 

     

    #쓰잘것없이 길고 뽀대나지 않던 함수가
    def square(number): 
      return number**2
    
    #이렇게 콤팩트한 사이즈로 바뀌었답니다 타다-
    square = lambda number: number**2
    print(square(10))
    >>>
    100

     

    마찬가지로...

    #쓰잘것없이 길고 뽀대나지 않던 함수가
    def is_even(숫자아): 
      return 숫자아 % 2 == 0
    #이렇게 콤팩트한 사이즈로 바뀌었답니다 타다-
    is_even = lambda 숫자아 : 숫자아 % 2 == 0
    print(is_even(10))
    >>>
    True

     

    참고로)

    lambda 매개변수1, 매개변수2 : 매개변수1+매개변수2처럼 매개변수를 여러 개 받는 함수도 람다로 만들 수 있음.

    pytha = lambda a, b: (a**2 + b**2)**0.5
    print(pytha(3,4))
    >>>
    5.0

     

    근디 이게 심플한 거긴 해?

     

    # 람다를 인라인 함수로 사용

    인라인 함수 : 한 줄 안에 무언가를 넣는 것 

    비끄므리) 인라인 스케이트... 인라인 정렬, 인라인 코드

     

    A = [2,4,6,8,10]
    이터레이터 = map(lambda number: number**2, A)
    print(list(이터레이터))
    
    이터레이ㅌ = filter(lambda 숫자아 : 숫자아 % 2 == 0, A)
    print(list(이터레이ㅌ))
    
    >>>
    [4, 16, 36, 64, 100]
    [2, 4, 6, 8, 10]

     

     

    # 리스트 함수의 key 키워드 매개변수

     

    기억나나요? min()과 max()

    lotto = [4,5,9,11,37,40]
    print(min(lotto))
    print(max(lotto))
    >>>
    4
    40

     

    근데 리스트가 아니라 딕셔너리일 때는?

    jamsil = [{
      "좌석명" : "테이블석",
      "가격":"47000"
    },{
      "좌석명" : "블루석",
      "가격":"20000"
    },{
      "좌석명" : "오렌지석",
      "가격":"18000"
    },{
      "좌석명" : "네이비석",
      "가격":"13000"
    }]
    
    print(min(jamsil))
    print(max(jamsil))
    >>>
    TypeError: '<' not supported between instances of 'dict' and 'dict'

     

    딕셔너리는 비교할 수 없다는 에러코드

    → min(), max()가 갖고있는 key라는 이름의 키워드 매개변수를 사용한다.

    key라는 이름의 키워드 매개변수는 무엇을 비교할지 return하는 함수를 넣어주면 된다.

    jamsil = [{
      "좌석명" : "테이블석",
      "가격":"47000"
    },{
      "좌석명" : "블루석",
      "가격":"20000"
    },{
      "좌석명" : "오렌지석",
      "가격":"18000"
    },{
      "좌석명" : "네이비석",
      "가격":"13000"
    }]
    def 가격(요소):
      return 요소["가격"]
    
    print("최소 가격:", min(jamsil, key = 가격))
    print("최대 가격:",max(jamsil, key = 가격))
    >>>
    최소 가격: {'좌석명': '네이비석', '가격': '13000'}
    최대 가격: {'좌석명': '테이블석', '가격': '47000'}

     

    얘도 람다로 작성 가능

    jamsil = [{
      "좌석명" : "테이블석",
      "가격":"47000"
    },{
      "좌석명" : "블루석",
      "가격":"20000"
    },{
      "좌석명" : "오렌지석",
      "가격":"18000"
    },{
      "좌석명" : "네이비석",
      "가격":"13000"
    }]
    
    print("최소 가격:", min(jamsil, key = lambda 좌석: 좌석["가격"]))
    print("최대 가격:", max(jamsil, key = lambda 좌석: 좌석["가격"]))
    >>>
    최소 가격: {'좌석명': '네이비석', '가격': '13000'}
    최대 가격: {'좌석명': '테이블석', '가격': '47000'}

     

    min, max말고 sort함수도 됨. (오름차순 정렬)

    jamsil = [{
      "좌석명" : "테이블석",
      "가격":"47000"
    },{
      "좌석명" : "블루석",
      "가격":"20000"
    },{
      "좌석명" : "오렌지석",
      "가격":"18000"
    },{
      "좌석명" : "네이비석",
      "가격":"13000"
    }]
    
    jamsil.sort( key = lambda 좌석: 좌석["가격"])
    print(jamsil)
    
    >>> [{'좌석명': '네이비석', '가격': '13000'}, {'좌석명': '오렌지석', '가격': '18000'}, {'좌석명': '블루석', '가격': '20000'}, {'좌석명': '테이블석', '가격': '47000'}]

     

     

    lambda()는 key라는 이름의 키워드 매개변수로 사용한다.


    https://replit.com/@wh3308/ramdakey

Designed by Tistory.