Python の実行モデルをハンズオンで学ぼう! 4

当サイトではアフィリエイト広告を利用しています。

リファレンス

Python のコードがどのように動くのか、初心者向けに ハンズオン形式 で解説します!
「なんとなく動かしているけど、実行の仕組みはよく分からない…」という方も、この記事を読めば Python の実行モデル を理解できるはずです。

今回は、以下の流れで進めます。

  1. Python の実行モデルとは?
  2. スクリプトの実行順序
  3. 名前空間とスコープ
  4. オブジェクトとバインディング
  5. コード実行のライフサイクル
  6. 実践的なハンズオン

それでは、実際にコードを書きながら学んでいきましょう!


1. Python の実行モデルとは?

Python のコードがどのように解釈され、実行されるのかを説明する仕組みを 実行モデル といいます。

Python のプログラムは、
スクリプトとして実行 するか
対話型シェル(REPL)で実行 するかのどちらかです。

ハンズオン: Python の実行方法

まずは、Python の実行方法を試してみましょう。

# スクリプトの実行
python my_script.py

# 対話型シェル(REPL)の起動
python

これらを試して、Python がどのように動作するのかを確認してください。


2. スクリプトの実行順序

Python は 上から下へ 順番にコードを実行します。
次のコードを実行して、どの順番で処理されるのかを確認しましょう。

ハンズオン: スクリプトの実行順序

print("1. スクリプトが開始されました")

def my_function():
    print("2. 関数の中に入りました")

print("3. 関数を呼び出します")
my_function()

print("4. スクリプトの最後")

実行方法

python script.py

👉 出力を見て、Python が 上から順番に実行されている ことを確認しましょう!


3. 名前空間とスコープ

Python では 変数関数 がどこで使えるのか(スコープ)と、Python がそれらをどのように管理するのか(名前空間)が重要です。

ローカルスコープとグローバルスコープ

次のコードを実行し、変数のスコープを確認しましょう。

ハンズオン: 名前空間の確認

global_var = "これはグローバル変数"

def my_func():
    local_var = "これはローカル変数"
    print(local_var)

print(global_var)
my_func()

# これはエラーになる(ローカル変数は外で使えない)
# print(local_var)

💡 local_var は関数の中でしか使えないので、関数の外で使おうとするとエラー になります。


4. オブジェクトとバインディング

Python では すべての値はオブジェクト です。そして 変数はオブジェクトへのラベル(参照) です。

ハンズオン: バインディングの確認

x = [1, 2, 3]
y = x  # xとyは同じリストを参照する
x.append(4)

print(y)  # [1, 2, 3, 4] となる

👉 y = x としただけでは、新しいリストが作られるのではなく、yx と同じリストを指します。
そのため、x.append(4) を実行すると、y のリストも変化します。

ポイント

  • 変数はオブジェクトそのものではなく、オブジェクトへの参照
  • =新しい変数を作るのではなく、参照をコピー する

5. コード実行のライフサイクル

Python のスクリプトは以下の流れで実行されます。

  1. コードが解釈される
  2. オブジェクト(変数や関数)がメモリに配置される
  3. コードが実行される
  4. 実行が終了すると変数やオブジェクトが解放される

これを確認するために、次のコードを実行してみましょう。

ハンズオン: ライフサイクルの確認

class Sample:
    def __init__(self, name):
        self.name = name
        print(f"{self.name} が作成されました")

    def __del__(self):
        print(f"{self.name} が削除されました")

obj = Sample("オブジェクトA")
del obj  # ここで削除

🔍 __del__ メソッドが呼ばれるタイミングを確認し、オブジェクトがメモリから解放される流れを理解しましょう。


6. 実践的なハンズオン

最後に、ここまでの内容をまとめたコードを実行してみましょう。

ハンズオン: スコープと実行モデルの確認

global_var = "グローバル変数"

def outer():
    outer_var = "関数内の変数"
    
    def inner():
        nonlocal outer_var
        local_var = "ローカル変数"
        print(f"inner: {global_var}, {outer_var}, {local_var}")
    
    inner()
    print(f"outer: {global_var}, {outer_var}")

outer()
print(f"global: {global_var}")

このコードを実行して、以下の点を確認してください。

global を使うと、関数の中からグローバル変数を変更できる
nonlocal を使うと、内側の関数から外側の関数の変数を変更 できる


まとめ

今回のハンズオンで学んだポイントを振り返りましょう。

Python のコードは上から順に実行される
変数や関数のスコープ(範囲)を理解する
すべての値はオブジェクトであり、変数はオブジェクトへの参照
スクリプトの実行ライフサイクルを意識する

Python の実行モデルを理解すると、プログラムの動きがよりクリアになります!
ぜひ、手を動かして確認しながら学習を進めてみてください🔥

それでは、Happy Coding!🎉