Python のコードがどのように動くのか、初心者向けに ハンズオン形式 で解説します!
「なんとなく動かしているけど、実行の仕組みはよく分からない…」という方も、この記事を読めば Python の実行モデル を理解できるはずです。
今回は、以下の流れで進めます。
- Python の実行モデルとは?
- スクリプトの実行順序
- 名前空間とスコープ
- オブジェクトとバインディング
- コード実行のライフサイクル
- 実践的なハンズオン
それでは、実際にコードを書きながら学んでいきましょう!
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
としただけでは、新しいリストが作られるのではなく、y
も x
と同じリストを指します。
そのため、x.append(4)
を実行すると、y
のリストも変化します。
ポイント
- 変数はオブジェクトそのものではなく、オブジェクトへの参照
=
は 新しい変数を作るのではなく、参照をコピー する
5. コード実行のライフサイクル
Python のスクリプトは以下の流れで実行されます。
- コードが解釈される
- オブジェクト(変数や関数)がメモリに配置される
- コードが実行される
- 実行が終了すると変数やオブジェクトが解放される
これを確認するために、次のコードを実行してみましょう。
ハンズオン: ライフサイクルの確認
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!🎉