IPython(Interactive Python)は、標準のPythonインタラクティブシェルを強力に拡張した対話型シェルです。入力補完、オブジェクト情報の参照、OSコマンドの実行などが容易に行えるため、データ分析やスクリプトの動作検証で広く利用されています。
ここでは、インストール方法から、実務で必須となる主要機能(補完、ヘルプ、マジックコマンド)について解説します。
インストールと起動
IPythonは単体でインストールするか、Anacondaなどのディストリビューションに含まれています。
インストール
pip install ipython
起動と終了
ターミナル(またはコマンドプロンプト)で以下のコマンドを入力します。
# 起動
ipython
# 終了
exit
# または [Ctrl] + [D] キー
1. Tabキーによる強力な補完
IPythonの最大の特徴は、Tabキーによる入力補完です。変数名、関数名、モジュール名、さらにはファイルパスまで補完可能です。
In [1]: import datetime
# 'da' と入力して Tabキーを押すと、'datetime' や 'date' などが候補に出ます
In [2]: da<TAB>
# オブジェクトの後ろで '.' を入力して Tabキーを押すと、メソッド一覧が表示されます
In [3]: datetime.date.<TAB>
Display all 14 possibilities? (y or n)
datetime.date.ctime datetime.date.isocalendar ...
2. 「?」コマンドによるオブジェクト情報の確認
変数や関数の後ろに ? または ?? を付けて実行することで、そのオブジェクトの詳細情報を即座に確認できます。print() 関数などを書く必要はありません。
? : ドキュメント(Docstring)の表示
変数の型や、関数の引数定義、説明文を表示します。
In [1]: my_list = [1, 2, 3]
In [2]: my_list?
Type: list
String form: [1, 2, 3]
Length: 3
Docstring:
Built-in mutable sequence.
If no argument is given, the constructor creates a new empty list.
The argument must be an iterable if specified.
?? : ソースコードの表示
関数の定義元のソースコードそのものを表示したい場合に使用します(Pythonで実装されている部分のみ)。
In [3]: def my_func(x):
...: return x * 2
...:
In [4]: my_func??
Signature: my_func(x)
Docstring: <no docstring>
Source:
def my_func(x):
return x * 2
File: <ipython-input-3-xxxx>
Type: function
3. マジックコマンドとシェルコマンド
IPythonには % から始まる独自の便利コマンド(マジックコマンド)と、OSのコマンドを実行する機能が備わっています。
主なマジックコマンド
| コマンド | 説明 |
%timeit | コードの実行時間を計測します(複数回実行して平均を出します)。In [1]: %timeit [i**2 for i in range(1000)] |
%run | 外部のPythonスクリプトファイルを実行します。In [2]: %run myscript.py |
%pwd | 現在の作業ディレクトリ(カレントディレクトリ)を表示します。 |
%cd | 作業ディレクトリを変更します。 |
%history | 入力履歴を表示します。 |
%paste | クリップボードにあるコードを整形して実行します(インデント崩れを防ぎます)。 |
OSコマンドの実行 (!)
先頭に ! を付けることで、ls や cd、pip install などのOSコマンドを直接実行できます。
# ファイル一覧の表示
In [10]: !ls -l
# パッケージのインストール
In [11]: !pip install requests
4. 入出力の履歴参照 (_, In, Out)
直前の計算結果や、過去の入出力を変数として再利用できます。
_(アンダースコア): 直前の出力結果(Out)を指します。_N(Nは数字):Out[N]の結果を指します。In: 入力履歴がリストとして格納されています。Out: 出力履歴が辞書として格納されています。
In [1]: 10 + 20
Out[1]: 30
In [2]: _ * 2
Out[2]: 60 # 直前の結果(30) * 2 が計算される
