IPython
Jupyter Notebook은 IPython 기반으로 만들어졌다.
다음과 같은 기능이 제공된다.
- 자동 완성
- 실행 시간 측정
- Shell 명령어 실행
- Magic Command
Magic Command
IPython에는 일반 Python 문법이 아닌, 추가 기능인 Magic Command가 존재한다.
| 명령어 | 설명 |
|---|---|
%pwd | 현재 작업 디렉토리 출력 |
%timeit | 코드 실행 시간 측정 |
%ls | 현재 디렉토리 파일 목록 출력 |
%load_ext autoreload | 자동 모듈 재로드 기능 활성화 |
%%writefile | 셀 내용을 파일로 저장 |
%는 한 줄(Line Magic)%%는 셀 전체(Cell Magic)에 적용
예를 들어,
%%writefile hello.py
print("Hello World")
위 코드는 셀 내용을 hello.py 파일로 저장된다.
객체지향 구조로 파일 분리하기
Notebook만 사용하면 코드가 길어질수록 관리가 어려워진다.
객체지향을 지키지 않으면 개발자의 정신건강에도 해롭기 때문에 매우 중요하다.
예시 구조
project/
├── main.ipynb
└── src/
├── __init__.py
└── character.py
간단한 클래스를 만들어보자.
%%writefile src/character.py
class Character:
def __init__(self, name):
self.name = name
def hello(self):
print(f"Hello, I'm {self.name}")
Notebook에서 다음처럼 import 해서 사용 가능하다.
from src.character import Character
player = Character("Player")
player.hello()
__init__.py
__init__.py 파일은 해당 디렉토리를 Python 패키지로 인식할 때 사용한다.
즉,
from src.character import Character
처럼 import 가능한 구조를 만들어준다.
최근 Python에서는 없어도 동작하는 경우가 많지만, 패키지 구조를 명확하게 하기 위해 일반적으로 함께 생성한다.
또한 자주 사용하는 클래스나 함수를 외부에 공개하는 용도로도 사용된다.
예를 들어:
# src/__init__.py
from .character import Character
__all__ = ["Character"]
그러면
from src import Character
처럼 사용할 수 있다.
__all__ 은 패키지에서 외부로 공개할 객체 목록을 의미한다.