파이썬 & 오픈소스 개발 Tip과 강좌

이곳은 파이썬과 여러 오픈소스 기반 프레임워크 관련 Tip과 강좌 게시판 입니다. 관련 개발을 진행하면서 알아내신 Tip이나 강좌와 새로운 소식을 적어 주시면 다른 공부하는 분들에게 큰 도움이 됩니다. 감사합니다. SQLER.com은 개발자와 IT전문가의 지식 나눔을 실천하기 위해 노력하고 있습니다.

안녕하세요. SQLER의 코난 김대우입니다. 

이번 강좌에서는, Python 중급 강좌 - 2. 람다(Lamda)를 진행토록 하겠습니다.

 

SQLER에서 진행되는 전체 Python / 머신러닝 강좌 목록

 

코드를 실행하기 위해서는, vscode에서 새로운 파일을 만들고 실행하시면 됩니다.

예를 들어, 2_lambda.py를 생성하고 코드를 실행합니다.

 

Python 중급 강좌 - 2. 람다(Lamda)

그럼, 두번째 중급강좌, 시작하겠습니다.

 

람다는 무엇이고 Python의 어떤 문제를 해결하나요?

람다를 이해하려면, 먼저 함수의 구조를 다시 살펴 보시면 더 빠르게 확인할 수 있습니다.

 

우선 아래의 코드를 살펴보겠습니다. Python에서 정렬(sort)을 하는 코드 예제입니다.

presenters = [
    {'name': 'Susan', 'age': 50},
    {'name': 'Christopher', 'age': 47}
]

# presenter 필드에 대해 sorting(정렬) 방법을 알지 못하기 때문에, 이 코드는 에러를 리턴합니다.
presenters.sort()
print(presenters)

이렇게 코드에서는 list의 item들(dict 데이터형)에 대해 정렬을 하지만, 오류가 발생합니다.

무엇보다도, dict에 대해서는 sort()가 동작하지 않기 때문이며, name과 age 중 어디에 대해서 sort를 할지 불명확하기 때문입니다.

 

함수를 생성해 dict에 대해서 sort 수행

이런 코드를 아래와 같이 함수를 만들어서 처리 가능합니다.

def sorter(item):
    return item['name']

presenters = [
    {'name': 'Susan', 'age': 50},
    {'name': 'Christopher', 'age': 47}
]

presenters.sort(key=sorter)
print(presenters)

이런 패턴으로 sorter 함수를 만들어서 sort할 수 있고, 코드는 잘 동작합니다.

 

하지만, 아주 단순한 한줄짜리 함수인데 이걸 함수로 만드는게 살짝(?) 번잡하다는 느낌이 들기도 합니다.

인자도 하나이고 리턴값도 하나인 단순한 함수인데, def나 return과 같은 추가 코드등 여러 부가적인 부분이 많이 보입니다.

이럴 경우 람다를 이용해 코드를 더 간결하게 처리 가능합니다.

 

람다로 변환된 코드

presenters = [
    {'name': 'Susan', 'age': 50},
    {'name': 'Christopher', 'age': 47}
]

# 알파벳 순으로 정렬
presenters.sort(key=lambda item: item['name'])
print('-- alphabetically --')
print(presenters)

# name의 길이로 정렬(짧은것부터 긴것까지)
presenters.sort(key=lambda item: len(item['name']))
print('-- length --')
print(presenters)

이렇게 깔끔하게, 한줄의 코드로 함수를 변경할 수 있습니다. 이것이 람다입니다.

 

자 그럼 다시 원래 이 강좌의 목표로 돌아가 볼까요?

 

람다(Lambda)

lambda 함수는 작은 이름 없는 함수입니다. Argument(인수)는 여러개를 사용할 수 있지만, 오직 하나의 표현식(expression)만 실행 가능합니다. 이것이 람다입니다. - 코드를 먼저 보셔서 이해하기 더 편하실거에요.

 

일반적인 함수를 람다로 변환

그렇다면, 기존의 함수 코드가 람다로 어떻게 치환될까요? 아래의 이미지가 도움 되실겁니다.

Slide6.JPG

이렇게 기존 함수를 람다로 치환할 수 있습니다.

 

람다는 코드 패턴을 찾기위해 검색할 경우 StackOverflow등의 결과에서 종종 볼 수 있습니다.

처음에는 복잡해 보일 수 있으나, 간결하게 함수를 한줄의 인라인으로 생성할 수 있어서 자주 사용됩니다.

 

일반 함수를 써도 물론 무방합니다. 하지만, 이 강좌의 목적이 이런 람다와 같은 코드를 읽고 활용하는 것이 차근차근 살펴보시고, 이후 익숙해 주시면 코드에도 적용해 보시길 바랍니다.

 

수고하셨습니다.

 

참고자료

개발자 커뮤니티 SQLER.com - Python 무료 강좌 - 기초, 중급, 머신러닝

c9-python-getting-started/more-python-for-beginners/02 - Lambdas at master · CloudBreadPaPa/c9-python-getting-started (github.com)

Python Lambda (w3schools.com)

 

No. Subject Author Date Views
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2021년 1월 업데이트) 코난(김대우) 2021.01.01 547
109 embedded SQL - GlueSQL, rust 기반 오픈소스 프로젝트 file 코난(김대우) 2021.10.22 7
108 대규모 머신러닝 프로젝트 Serving에 사용되는 Python WAS, ASGI - uvicorn file 코난(김대우) 2021.10.06 38
107 Apache Arrow 리뷰 file 코난(김대우) 2021.10.05 26
106 autopep8을 이용한 python 린트(linting) 구현 코난(김대우) 2021.09.15 38
105 Python에서 환경변수(environment variable) 처리 코난(김대우) 2021.09.15 31
104 Python에서 random 문자열이나 숫자 가져오는 방법 코난(김대우) 2021.09.15 35
103 Python 중급 강좌 - 9. 비동기 작업(Asynchronous operations): asyncio 코난(김대우) 2021.01.03 326
102 Python 중급 강좌 - 8. 외부 리소스 관리(Managing external resources): with 코난(김대우) 2021.01.03 180
101 Python 중급 강좌 - 7. 파일작업(File read/write) file 코난(김대우) 2021.01.03 206
100 Python 중급 강좌 - 6. 파일시스템(File system) 관리 코난(김대우) 2021.01.03 215
99 Python 중급 강좌 - 5. 다중상속(Mixins - multiple inheritance) 코난(김대우) 2021.01.03 116
98 Python 중급 강좌 - 4. 상속(Inheritance) 코난(김대우) 2021.01.03 63
97 Python 중급 강좌 - 3. 클래스(Class) 코난(김대우) 2021.01.03 77
» Python 중급 강좌 - 2. 람다(Lamda) file 코난(김대우) 2021.01.03 103
95 Python 중급 강좌 - 1. Python 스타일 가이드: 서식(Formatting)과 린팅(Linting) file 코난(김대우) 2021.01.02 138
94 Python 초급 강좌 목차 - 19. 코드에서 중요한 키(패드워드) 관리 - dotenv 코난(김대우) 2021.01.02 96
93 Python 초급 강좌 목차 - 18. 데코레이터(Decorators) 코난(김대우) 2021.01.02 72
92 Python 초급 강좌 목차 - 17. JSON 데이터 처리 file 코난(김대우) 2021.01.02 165
91 Python 초급 강좌 목차 - 16. 외부 웹서비스 API 호출 file 코난(김대우) 2021.01.02 180
90 Python 초급 강좌 목차 - 15. 패키지(Package): import, pip 코난(김대우) 2021.01.02 66





XE Login