このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Python入門】プログラムの実行に関連する関数

プログラムの実行に関連する関数

 プログラムの実行に関連する関数は、Pythonコードを動的に評価・実行したり、プログラムの環境情報を取得するなど、プログラム自体の実行やデバッグ、動的制御に深く関わるツールです。これらの関数を活用することで、ユーザ入力に基づいた計算機プログラムや、スクリプトの自作インタプリタ、さらにはデバッグ作業の自動化など、柔軟なプログラム実行が可能になります。
 ここでは、eval、exec、compile、globals、locals、callable、breakpoint、helpなど、プログラムの実行や環境に関連する主要な関数の基本的な使い方と応用例を、以下の章立てに沿って解説します。

プログラムのダウンロード

 「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。

1.eval関数

1.1. eval関数の概要

eval関数は、指定された文字列をPythonの式として評価し、その結果の値を返します。

【構文】

eval(文字列)
項目説明
入力Pythonの式を表す文字列
出力式を評価した結果の値
用途ユーザ入力をもとに動的に計算を行う計算機プログラムなど

1.2. eval関数の使用例

 次の例では、ユーザが入力した数式をeval関数で評価し、その結果を表示する簡単な計算機プログラムを示します。

# ユーザ入力による計算機プログラムの例
while True:
    try:
        expr = input("Enter an expression (or 'q' to quit): ")
        if expr == 'q':
            break
        # 入力した式を評価して結果を表示
        print("= ", eval(expr))
    except Exception as e:
        print("Error:", e)

実行結果

Enter an expression (or 'q' to quit):  3+6
=  9
Enter an expression (or 'q' to quit):  3*(2+3)
=  15
Enter an expression (or 'q' to quit):  q

解説

  • ユーザが入力した文字列をeval関数で評価し、数式の結果を求めます。
  • 例外処理を組み合わせることで、不正な入力に対してエラーメッセージを表示し、プログラムの停止を防いでいます。

2.exec関数とcompile関数

2.1. exec関数の概要

 exec関数は、指定された文字列をPythonプログラムとして実行します。戻り値はなく、実行結果は直接プログラムの副作用(変数の変更や出力)に反映されます。

【構文】

exec(文字列)

【例】

# ユーザ入力をプログラムとして実行する例
while True:
    try:
        code = input("Enter Python code (or 'q' to quit): ")
        if code == 'q':
            break
        exec(code)
    except Exception as e:
        print("Execution error:", e)

実行結果

Enter Python code (or 'q' to quit):  print("Python")
Python
Enter Python code (or 'q' to quit):  q

解説

  • exec関数は、入力されたコードをその場で実行します。
  • この例では、ユーザがコードを入力するたびに、実際にそのコードが実行されるため、代入や関数呼び出しなどを動的に試すことができます。

2.2. compile関数の概要と連携

 compile関数は、文字列(またはファイルの内容)をPythonのコードオブジェクトに変換します。生成されたコードオブジェクトは、exec関数に渡して実行することができます。

【構文】

compile(文字列, '', 'exec')

【例】

# 文字列をコンパイルしてから実行する例
while True:
    try:
        code_str = input("Enter code to compile and execute (or 'q' to quit): ")
        if code_str == 'q':
            break
        # 文字列をコードオブジェクトに変換し、実行する
        code_obj = compile(code_str, '<string>', 'exec')
        exec(code_obj)
    except Exception as e:
        print("Compilation/Execution error:", e)

実行結果

Enter code to compile and execute (or 'q' to quit):  print("Python")
Python
Enter code to compile and execute (or 'q' to quit):  q

解説

  • compile関数は、文字列をコードオブジェクトに変換し、これをexec関数で実行します。
  • これにより、コードの事前検証やキャッシュなどの柔軟な処理が可能になります。

3.環境情報を取得する関数

3.1. globals関数とlocals関数

 globals関数とlocals関数は、プログラム内で定義されている名前(変数、関数、クラスなど)の辞書を返します。

【構文】

globals() および locals()
関数返される内容
globals()グローバルスコープの名前と値の辞書
locals()現在のローカルスコープの名前と値の辞書

3.2. callable関数

 callable関数は、指定したオブジェクトが呼び出し可能かどうかを判定します。これは関数やメソッド、クラスなどが対象です。

【構文】

callable(オブジェクト)


  構文: callable(オブジェクト)

オブジェクトcallableの結果
123False
"hello"False
lenTrue
listTrue

【例】

print("Is 123 callable?", callable(123))         # 出力: False
print("Is 'hello' callable?", callable("hello"))   # 出力: False
print("Is len callable?", callable(len))           # 出力: True
print("Is list callable?", callable(list))         # 出力: True

実行結果

Is 123 callable? False
Is 'hello' callable? False
Is len callable? True
Is list callable? True

解説

callable関数を使うと、オブジェクトが関数として呼び出し可能かどうかを簡単にチェックできます。

4.デバッグとヘルプ

4.1. breakpoint関数

 breakpoint関数は、プログラムの実行を一時停止してPythonデバッガ(pdb)に制御を移すための関数です。デバッグ中に変数の値や実行の流れを確認するのに役立ちます。cを入力して次のブレークポイントまで実行することができます。※JyupyterLabでは実行できません。

【構文】

breakpoint()

【例】

x = 100
breakpoint()  # ここでプログラム実行が停止し、pdbモードになる
y = 200
print("x:", x, "y:", y)

実行結果

x: 100 y: 200

解説

  • breakpoint() の呼び出しにより、プログラムが一時停止し、デバッガの対話シェルに入ります。
  • pdbを利用して変数の確認やコードのステップ実行が可能です。

4.2. help関数

 help関数は、指定されたオブジェクトのドキュメント(説明文)を表示します。これは、関数やクラスの使い方を確認するのに非常に便利です。

help(オブジェクト)

【例】

# 組み込み関数absのヘルプを表示
help(abs)

実行結果

Help on built-in function abs in module builtins:

abs(x, /)
    Return the absolute value of the argument.

解説

help(abs) を実行すると、abs関数の仕様や使用例が表示され、関数の詳細な説明を確認できます。

まとめ

 プログラムの実行に関連する関数は、ユーザ入力を評価・実行するためのeval、exec、compileから、プログラムの実行環境(グローバル・ローカル名前空間)を調べるglobals/locals、オブジェクトの呼び出し可能性をチェックするcallable、デバッグ支援のbreakpoint、さらにドキュメントを表示するhelp関数など、幅広い機能を持っています。

  • eval関数は文字列をPythonの式として評価し、結果を返します。
  • exec関数とcompile関数は、文字列またはコードオブジェクトを実行するために使われ、インタプリタのような動作を実現します。
  • globals関数とlocals関数は、現在の名前空間の状態を辞書として返し、動的な環境情報の把握に役立ちます。
  • callable関数でオブジェクトが呼び出し可能かを確認し、breakpoint関数でデバッグモードに移行、help関数で詳細なドキュメントを参照できます。

 これらの関数を組み合わせることで、動的なコード評価、実行、デバッグが可能となり、より柔軟で強力なPythonプログラミングが実現できます。