Pythonのcodeモジュール入門:インタプリタ基本クラスの使い方
Pythonの対話モードは、REPL(Read-Evaluate-Print-Loop:読み込み・評価・表示・繰り返し)という仕組みで動作しています。標準ライブラリのcodeモジュールを利用すると、Pythonスクリプトの中からこのREPL環境を簡単に構築できます。
codeモジュールで定義されている2つのクラス
InteractiveInterpreter: ソースコードの解析とインタプリタの状態(ユーザーの名前空間)を管理するクラスです。
InteractiveConsole: 対話型Pythonインタプリタの動作を忠実に再現するクラスです。
便利な関数
interact(): read-eval-printループ(読み込み・評価・表示の繰り返し)を実行するための便利な関数です。
compile_command(): Pythonインタプリタのメインループ(REPL)をエミュレートしたいプログラムに役立つ関数です。
InteractiveInterpreterの主なメソッド
runsource(): インタプリタ内でソースコードをコンパイルして実行します。
runcode(): コードオブジェクトを実行します。
InteractiveConsoleの主なメソッド
InteractiveConsoleクラスはInteractiveInterpreterのサブクラスであるため、上記のメソッドもそのまま利用できます。さらに、以下のメソッドが定義されています。
interact(): 対話型Pythonコンソールの動作を忠実に再現します。
push(): 1行分のソーステキストをインタプリタに渡します。
resetbuffer(): 入力バッファから未処理のソーステキストを取り除きます。
raw_input(prompt=""): プロンプトを表示し、デフォルトではsys.stdinから1行を読み込みます。
使用例
import code
x = 10
y = 20
def add(x,y):
return x+y
print (add(x,y))
code.interact(local=locals())
print (x,y)
print (add(x,y))
このコードでは、まず2つの変数を定義して関数に渡し、その後に対話コンソールを起動しています。引数local=locals()を指定することで、インタプリタのループ内でローカル名前空間をデフォルトとして利用できるようになります。
対話コンソール内で変数に別の値を代入し、Ctrl+Dを押してコンソールを終了すると、その新しい値が以降の処理に引き継がれます。
実行結果
addition= 30 Python 3.6.6 |Anaconda custom (64-bit)| (default, Oct 9 2018, 12:34:16) [GCC 7.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> x=100 >>> y=200 >>> now exiting InteractiveConsole... 100 200 addition = 300
-
Pythonのグローバルインタプリタロック(GIL)とは?仕組みと課題をわかりやすく解説
本記事では、Pythonのグローバルインタプリタロック(GIL:Global Interpreter Lock)について詳しく解説します。GILとは、複数のスレッドが同時にPythonインタプリタのコードを実行できないよう制御する排他制御機構(ロック)のことです。この仕組みにより、マルチスレッド環境であっても、実際には一度に1つのスレッドしかPythonバイトコードを実行できません。そのため、GILはPython 3.x以前における設計上の課題として認識されることが多く、真の意味でのマルチスレッド処理を妨げる要因となっています。GILが導入された理由Pythonは自動ガベージコレクション(GC
-
Pythonでクラスを定義する方法を解説!基本構文と書き方のポイント
Pythonでは、ほぼすべてのコードがクラスを使って実装されています。プログラマーはクラスを利用することで、関連性の高いコードをひとつにまとめて管理できます。これは「class」というキーワードによって実現されており、クラスはオブジェクト指向プログラミングの構成要素を集約したものです。クラスとは何かクラスとは、オブジェクト(インスタンス)を生成するための設計図・テンプレートです。オブジェクトはメンバー変数(属性)を持ち、それに関連付けられた振る舞い(メソッド)を備えています。Pythonでは、classキーワードを使うことでクラスを作成します。基本的なクラスの定義方法まずは、関数やメソッドを一