이 노트북은 제이크 반더플라스(Jake VanderPlas)의 A Whirlwind Tour of Python(OReilly Media, 2016)를 기반으로 만들어졌습니다. 이 내용은 CC0 라이센스를 따릅니다. 전체 노트북의 목록은 https://github.com/rickiepark/WhirlwindTourOfPython 에서 볼 수 있습니다.
< 제너레이터 | 목차 | 문자열과 정규 표현식 >
다양한 작업에 파이썬을 유용하게 만드는 한가지 특징은 “배터리가 포함되어(battery included)” 있다는 사실입니다. 즉 파이썬의 표준 라이브러리는 다양한 작업에 유용한 도구들을 포함하고 있습니다. 이 라이브러리 위에 더 특화된 기능을 제공하는 서드파디 도구와 패키지들의 거대 생태계가 구축되어 있습니다. 여기서는 표준 라이브러리 모듈을 임포팅하고 서드파티 모듈을 설치하기 위한 도구와 자신만의 모듈을 만드는 법에 대해 설명하겠습니다.
모듈 로딩: import 문
내장 모듈과 서드파티 모듈을 로딩하기 위해 파이썬은 import
문을 제공합니다. 이 명령을 사용하는 몇 가지 방법이 있는데 권장하는 것과 그렇지 않은 것까지 간단하게 살펴 보겠습니다.
명시적 모듈 임포팅
명시적으로 모듈을 임포팅하면 모듈의 컨텐츠를 네임스페이스 아래 유지시킵니다. 네임스페이스는 모듈의 내용을 “.
“으로 참조할 수 있습니다. 예를 들어 내장 math
모듈을 임포트하고 의 코사인 값을 계산합니다:
import math math.cos(math.pi)
-1.0
별칭을 사용한 명시적 모듈 임포팅
모듈 이름이 길면 모듈의 컨텐츠를 사용하기 위해 매번 전체 모듈 이름을 적기 불편합니다. 이런 이유로 보통 “import ... as ...
” 패턴을 사용해 네임스페이스의 짧은 별명을 만듭니다. 예를 들어 데이터 과학 분야에서 유명한 서드파티 패키지인 넘파이(NumPy, Numerical Python)는 관례적으로 np
별칭을 사용해 임포트합니다:
import numpy as np np.cos(np.pi)
-1.0
명시적 모듈 컨텐츠 임포팅
때로는 모듈 네임스페이스를 임포팅하는 것대신 모듈에서 몇 개의 컨텐츠만 임포팅하고 싶을 수 있습니다. 이럴 때는 “from ... import ...
” 패턴을 사용합니다. 예를 들어, math
모듈에서 cos
함수와 pi
상수만을 임포트할 수 있습니다:
from math import cos, pi cos(pi)
-1.0
모듈 컨텐츠 묵시적 임포팅
마지막으로 가끔 모듈 컨텐츠 전체를 로컬 네임스페이스로 임포팅하는게 편리할 때가 있습니다. 이런 경우에는 “from ... import *
” 패턴을 사용합니다:
from math import * sin(pi) ** 2 + cos(pi) ** 2
1.0
이 패턴은 사용한다고 해도 삼가해서 사용해야 합니다. 이런 임포팅은 이따금 원치 않게 함수 이름을 덮어 쓸 수 있고 묵시적인 임포팅은 무엇이 바뀌었는지 찾기 어려운 문제가 있습니다.
예를 들어 파이썬은 여러 연산에 사용할 수 있는 sum
함수가 있습니다:
help(sum)
Help on built-in function sum in module builtins:
sum(iterable, start=0, /)
Return the sum of a 'start' value (default: 0) plus an iterable of numbers
When the iterable is empty, return the start value.
This function is intended specifically for use with numeric values and may
reject non-numeric types.
이 함수를 사용해 특정 값에서 시작하는 시퀀스의 합을 계산할 수 있습니다(-1
에서부터 시작해 보겠습니다):
sum(range(5), -1)
9
이제 numpy
에서 *
를 임포팅하고 같은 함수 이름이 겹칠 때 어떤 일이 생기는지 보겠습니다:
from numpy import *
sum(range(5), -1)
10
결괏값이 1만큼 커졌습니다! 이런 이유는 import *
문장이 내장 sum
함수를 numpy.sum
함수로 바꾸었기 때문입니다. 두 함수는 다르며 전자는 -1
부터 시작해 range(5)
를 더하지만, 후자는 마지막 축(-1
의 의미)을 따라 range(5)
를 더합니다. 이것이 “import *
“를 사용했을 때 조심하지 않으면 일어날 수 있는 상황입니다. 그래서 작업에 대해 정확히 알고 있지 않다면 이런 방식은 피하는 것이 좋습니다.
파이썬 표준 라이브러리 임포팅
파이썬의 표준 라이브러리는 많은 내장 모듈을 담고 있으며 파이썬 문서에서 전체를 볼 수 있습니다. 이들은 모두 import
문으로 임포팅할 수 있고 이전 섹션에서처럼 도움말 함수를 사용해 살펴 볼 수 있습니다. 둘러 보고 익혀둘만한 극히 일부 모듈을 다음에 나열하였습니다:
os
와sys
: 파일 디렉토리 구조의 탐색과 쉘 명령 실행을 포함한 운영체제 시스템과의 인터페이싱 도구math
와cmath
: 실수와 복소수에 대한 수학 함수와 연산들itertools
: 반복자와 제너레이터를 만들고 다루기 위한 도구들functools
: 함수형 프로그래밍을 지원하기 위한 도구들random
: 유사 난수 생성을 위한 도구들pickle
: 객체를 저장하고 디스크에서 로딩하는 등의 객체 지속성을 위한 도구들json
과csv
: JSON과 CSV 포맷의 파일을 읽기 위한 도구들urllib
: HTTP와 다른 웹 요청을 위한 도구들
이런 모듈의 설명과 다른 많은 것들을 파이썬 표준 라이브러리 문서에서 볼 수 있습니다: https://docs.python.org/ko/3/library/
서드파티 모듈 임포팅
파이썬을 데이터 과학 세계에서 특히 유용하게 만드는 한 가지는 서드파티 생태계입니다. 이 모듈들은 내장 모듈처럼 임포팅할 수 있지만 먼저 모듈을 시스템에 설치해야 합니다. 이런 모듈의 표준 저장소는 파이썬 패키지 인덱스(줄여서 PyPI)로 웹 주소는 http://pypi.python.org/ 입니다. 편리하게 파이썬은 PyPI에 있는 패키지를 추출하여 자동으로 설치하는 pip
(재귀적 약어인 “pip installs packages”를 의미합니다) 프로그램을 기본으로 제공합니다(만약 파이썬 버전 2를 사용하면 pip
를 별도로 설치해야 합니다). 예를 들어 제가 만든 supersmoother
패키지를 설치하려면 다음과 같은 명령을 입력하는 것이 전부입니다:
$ pip install supersmoother
이 패키지의 소스 코드가 자동으로 PyPI 저장소에서 다운로드되고 기본 파이썬 경로에 설치됩니다(이 컴퓨터에서 적절한 권한이 있다고 가정합니다).
PyPI와 pip
인스톨러에 대해 더 알고 싶다면 http://pypi.python.org/ 문서를 참고하세요.
< 제너레이터 | 목차 | 문자열과 정규 표현식 >