Python 무기 장착 하기 (2) ( Pythonic Code ) [2023.04.20]

torch·2023년 4월 20일
0

파이썬 잠깐

목록 보기
4/5

Lambda & Map & Reduce

Lambda

  • 함수 이름 없이, 함수처럼 쓸 수 있는 익명 함수
  • 수학의 람다 대수에서 유래함

    Python 3 부터는 권장하지 않으나 여전히 많이 쓰임
    PEP 8에서는 lambda의 사용을 권장하지 않음
  • 어려운 문법
  • 테스트의 어려움
  • 문서화 docstring 지원 미비
  • 코드 해석의 어려움
  • 이름이 존재하지 않는 함수의 출현
  • but 그래도 많이 쓴다...

Map

두 개 이상의 list에도 적용 가능
if filter도 사용 가능

  • Python 3는 iteration을 생성 → list를 붙여줘야 list 사용 가능
  • 실행시점의 값을 생성, 메모리 효율적

Reduce

map function과 달리 list에 똑같은 함수를 적용해서 통합

  • Lambda, Map, Reduce는 간단한 코드로 다양한 기능을 제공
  • 그러나 코드의 직관성이 떨어져서 lambda나 reduce는 Python 3에서 사용을 권장하지 않음
  • Legacy library나 다양한 머신러닝 코드에서 여전히 사용중

Iterable Object

Sequence형 자료형에서 데이터를 순서대로 추출하는 object

  • 내부적 구현으로 __iter__ 와 __next__가 사용됨
  • iter() 와 next() 함수로 iterable 객체를 iterator object로 사용

Generator

  • iterable object를 특수한 형태로 사용해주는 함수
  • element가 사용되는 시점에 값을 메모리에 반환
    : yield를 사용해 한번에 하나의 element만 반환함

Generator Comprehension

  • list comprehension과 유사한 형태로 generator 형태의 list 생성
  • generator expression이라는 이름으로도 부름
  • [] 대신 ()를 사용하여 표현

Why and When Generator?

일반적인 iterator는 generator에 반해 훨씬 큰 메모리 용량 사용

  • list 타입의 데이터를 반환해주는 함수는 generator로 만들어라
    : 읽기 쉬운 장점, 중간 과정에서 loop이 중단될 수 있을 때
  • 큰 데이터를 처리할 때는 generator expression을 고려하라
    : 데이터가 커도 처리의 어려움이 없음
  • 파일 데이터를 처리할 때도 generator를 쓰자
profile
비전공 개발 공부 이야기

0개의 댓글