함수 응용
내장 함수 (Built-in Functions)
- 파이썬 인터프리터에는 항상 사용할 수 있는 많은 함수와 형(type)이 내장되어 있음
map(function, iterable)
- 순회 가능한 데이터구조(iterable)의 모든 요소에 함수(function) 적용하고, 그 결과를 map object로 반환
filter(function, iterable)
- 순회 가능한 데이터 구조의 모든 요소에 함수 적용하고, 그 결과가 True인 것들을 filter object로 반환
zip(*iterables)
- 복수의 iterable을 모아 튜플을 원소로 하는 zip object를 반환
lambda [parameter] : 표현식
- 표현식을 계산한 결과값을 반환하는 함수로, 이름이 없는 함수여서 익명 함수라고도 불림
- 특징 : return문을 가질 수 없음
간편 조건문 외 조건문이나 반복문을 가질 수 없음
- 장점 : 함수를 정의해서 사용하는 것보다 간결하게 사용 가능
def를 사용할 수 없는 곳에서도 사용가능
# 삼각형 넓이 구하는 공식
def triangle_area(b,h):
return 0.5 * b * h
print(triangle_area(5,6)) # 15.0
# 삼각형 넓이 구하는 공식 - 람다
triangle_area = lambda b, h : 0.5 * b * h
print(triangle_area(5,6)) # 15.0
재귀 함수 (recursive function)
- 자기 자신을 호출하는 함수
- 무한한 호출을 목표로 하는 것이 아니며, 알고리즘 설계 및 구현에서 유용하게 활용
알고리즘 중 재귀 함수로 로직을 표현하기 쉬운 경우가 있음(예-점화식)
변수의 사용이 줄어들며, 코드의 가독성이 높아짐
- 1개 이상의 base case(종료되는 상황)가 존재하고, 수렴하도록 작성
** 주의사항
- 재귀 함수는 base case에 도달할 때까지 함수를 호출함
- 메모리 스택이 넘치게 되면 프로그램이 동작하지 않게 됨
- 파이썬에서 최대 재귀 깊이가 1,000번으로, 호출 횟수가 이를 넘어가게 되면 Recursion Error 발생
- 반복문과 재귀 함수 비교
- 알고리즘 자체가 재귀적인 표현이 자연스러운 경우 재귀함수를 사용함
- 재귀 호출은 변수 사용을 줄여줄 수 있음
- 재귀 호출은 입력 값이 커질 수록 연산 속도가 오래 걸림
패킹 / 언패킹 (Packing / Unpacking)
모든 시퀀스형(리스트, 튜플 등)은 패킹/언패킹 연산자 *를 사용하여 객체의 패킹 또는 언패킹이 가능
패킹
- 대입문의 좌변 변수에 위치
- 우변의 객체 수가 좌변의 변수 수보다 많을 경우 객체를 순서대로 대입
- 나머지 항목들은 모두 별 기호로 표시된 변수에 리스트로 대입
언패킹
- argument 이름이 *로 시작하는 경우, argument unpacking이라 함
- *패킹의 경우, 리스트로 대입
- *언패킹의 경우 튜플 형태로 대입
💡 별표(*) 연산자가 곱셈을 의미하는지 Packing/Unpacking 연산자인지 구분
Packing/Unpacking 연산자
- *가 대입식의 좌측에 위치하는 경우
- *가 단항 연산자로 사용되는 경우
단항 연산자 : 하나의 항을 대상을 연산이 이루어지는 연산자
산술 연산자로서의 *
- *가 이항연산자로 사용되는 경우
- 이항 연산자 : 두 개의 항을 대상으로 연산이 이루어지는 연산자
함수 가변 입력
정해지지 않은 여러 개의 Arguments 처리
- print 함수의 Arguments 개수가 변해도 잘 동작하는 이유는?
-> 애스터리스크(Asterisk) 혹은 언패킹 연산자라고 불리는 *덕분
가변 인자(*args)
가변 인자 : 여러 개의 Positional Argument를 하나의 필수 parameter로 받아서 사용
- 몇 개의 Positional Argument를 받을지 모르는 함수를 정의할 때 유용
모듈
모듈과 패키지
- 다양한 기능을 하나의 파일로 (모듈,module)
- 다양한 파일을 하나의 폴더로 (패키지, package)
- 다양한 패키지를 하나의 묶음으로 (라이브러리, library)
- 이것을 관리하는 관리자 (pip)
- 패키지의 활용 공간 (가상환경)
- 모듈 : 특정 기능을 하는 코드의 파이썬 파일(.py) 단위로 작성한 것
- 패키지 :특정 기능과 관련된 여러 모듈의 집합 / 패키지 안에는 또 다른 서브 패키지를 포함
모듈과 패키지 불러오기
- import module
- from module import var, function, Class
- from module import *
- from package import module
- from package.module import var, function, Class
파이썬 라이브러리
파이썬에 기본적으로 설치된 모듈과 내장 함수
파이썬 패키지 관리자(pip)
- 패키지 설치
- 최신 버전 / 특정 버전 / 최소 버전을 명시하여 설치할 수 있음
- 이미 설치되어 있는 경우 이미 설치되어 있음을 알리고 아무것도 하지 않음
- $pip install SomePackage : 모두 bash, cmd 환경에서 사용되는 명령어
- 패키지 삭제
- $pip uninstall SomePackage
- 패키지 목록 및 특정 패키지 정보
- $pip list
- $pip show SomePackage
- 패키지 관리하기
- 아래의 명령어들을 통해 패키지 목록을 관리[1]하고 설치할 수 있음[2]
- 일반적으로 패키지를 기록하는 파일의 이름은 requirements.tex로 정의함
- $ pip freeze > requirements.txt
- $ pip install -r requirements.txt
모듈과 패키지 활용하기
- 패키지는 여러 모듈/하위 패키지로 구조화
- 활용 예시 : package.module
- 모든 폴더에는 __init.__py를 만들어 패키지로 인식
- Python 3.3부터는 파일이 없어도 되지만, 하위 버전 호환 및 프레임워크 등에서의 동작을 위해 파일을 생성하는 것을 권장
가상환경
- 파이썬 표준 라이브러리가 아닌 외부 패키지와 모듈을 사용하는 경우 모두 pip를 통해 설치 해야 함
- 복수의 프로젝트를 하는 경우 버전이 상이할 수 있음
- 과거 외주 프로젝트 - django 버전 2.x
- 신규 회사 프로젝트 - django 버전 3.x
- 이러한 경우 가상환경을 만들어 프로젝트별로 독립적인 패키지를 관리 할 수 있음
- 가상 환경을 만들고 관리하는데 사용되는 모듈 (Python 버전 3.5부터)
- 특정 디렉토리에 가상 환경을 만들고, 고유한 파이썬 패키지 집합을 가질 수 있음
- 특정 폴더에 가상 환경이 (패키지 집합 폴더 등) 있고
- 실행 환경(예-bash)에서 가상환경을 활성화 시켜
- 해당 폴더에 있는 패키지를 관리 / 사용함
가상환경 생성
가상환경을 생성하면, 해당 디렉토리에 별도의 파이썬 패키지가 설치
$ python -m venv <폴더명>
가상환경 활성화/ 비활성화
아래의 명령어를 통해 가상환경을 활성화
가상환경 비활성화는 $ deactivate 명령어를 사용
'Algorithm > Algorithm Theory' 카테고리의 다른 글
[Python] 05.데이터구조2 (1) | 2023.02.05 |
---|---|
[Python] 04.데이터 구조1 (0) | 2023.02.05 |
[Python] 02.함수 기본 (0) | 2023.02.05 |
[Python] 01.제어문 (1) | 2023.02.05 |
[Python] 00.파이썬 기초문법 (2) | 2023.02.05 |