第17回|Pythonのスコープとは?ローカル変数とグローバル変数の違いをやさしく解説|はじめてのPython

* 当サイトでは、コンテンツの一部に広告を掲載しています。

System Note $ cat /proc/ai-disclosure

本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。

第17回|Pythonのスコープとは?ローカル変数とグローバル変数の違いをやさしく解説|はじめてのPython

はじめてのPython | 第17回

目次

1. はじめに

この回では、変数がどこで使えるかを表すスコープを学びます。前回は、return を使って関数から値を返す方法を確認しました。

関数を使うようになると、同じ名前の変数をいくつも見かけるようになります。そのときに重要なのが、その変数がどの範囲で使えるかという考え方です。

2. この回で学ぶこと

  • ローカル変数
  • グローバル変数
  • 関数の中と外の違い
  • 同じ名前の変数を使ったときの動き
  • 変数を使える範囲

3. 概念の説明

変数が使える範囲を、スコープと呼びます。Pythonでは、関数の中で作った変数と、関数の外で作った変数では、使える範囲が異なります。

関数の中で作った変数を、ローカル変数と呼びます。ローカル変数は、その関数の中でだけ使えます。

def show_message():
    text = "こんにちは"
    print(text)

このコードの text はローカル変数です。show_message() の中では使えますが、関数の外では使えません。

一方で、関数の外で作った変数は、グローバル変数と呼ばれます。

message = "Python"

def show_message():
    print(message)

このコードの message はグローバル変数です。関数の外で作られていますが、この例では関数の中から読むことができます。

ただし、関数の中で新しく作った変数は、その関数だけのものとして扱われます。たとえば、外と中で同じ名前を使っても、別の変数として扱われます。

name = "田中"

def show_name():
    name = "佐藤"
    print(name)


show_name()
print(name)

実行結果は次のようになります。

佐藤
田中

関数の中の name はローカル変数です。関数の外の name とは別の変数なので、外側の値は変わりません。

このように、同じ名前でも、どこで作られたかによって使える範囲と意味が変わります。変数を見るときは、その変数が関数の中にあるのか、外にあるのかを確認することが重要です。

4. サンプルコード

次のコードを見てください。

count = 10


def show_count():
    count = 5
    print("関数の中:", count)


show_count()
print("関数の外:", count)

このコードでは、関数の中と外で同じ count という名前を使っています。しかし、2つは別の変数として扱われます。

5. 実行手順

まず、scope.py というファイルを作ります。

touch scope.py

scope.py をエディターで開き、次のコードを書いて保存します。

count = 10


def show_count():
    count = 5
    print("関数の中:", count)


show_count()
print("関数の外:", count)

保存したら、ターミナルで次のコマンドを実行します。

python3 scope.py

実行結果は次のようになります。

関数の中: 5
関数の外: 10

6. コードの読み方

  • count = 10 は、関数の外で作られたグローバル変数です。
  • この count は、プログラム全体の外側の場所にあります。
  • def show_count(): は、show_count という関数を定義しています。
  • その中の count = 5 は、関数の中で作られたローカル変数です。
  • このローカル変数 count は、関数の外の count とは別のものです。
  • そのため、print("関数の中:", count) では 5 が表示されます。
  • show_count() を実行しても、関数の外の count = 10 はそのまま残ります。
  • そのあとで print("関数の外:", count) を実行すると、外側の count が使われるので 10 が表示されます。

7. 初学者がつまずきやすい点

  • ローカル変数は関数の中でだけ使える
  • グローバル変数は関数の外で作る
  • 関数の中と外で同じ名前を使っても、別の変数になることがある
  • 変数の値を見るときは、どこで作られたかを確認する
  • 関数の中で作った変数は、関数の外ではそのまま使えない

特に、関数の中で count = 5 と書いたからといって、外の count = 10 が自動で書き換わるわけではありません。別のスコープにある変数として扱われるためです。

また、グローバル変数は関数の中から読めても、初学者の段階では必要以上に変更しないほうが理解しやすくなります。

8. よくあるエラー

1つ目は、ローカル変数を関数の外で使おうとする場合です。

def show_message():
    text = "こんにちは"


show_message()
print(text)

このときは、次のようなエラーになります。

NameError: name 'text' is not defined

text は関数の中だけで作られたローカル変数なので、外では使えません。

2つ目は、同じ名前なら同じ変数だと思ってしまうことです。

name = "田中"

def change_name():
    name = "佐藤"


change_name()
print(name)

実行結果は次のようになります。

田中

関数の中で作った name はローカル変数なので、外の name は変わりません。

3つ目は、関数の中で作った値を外でも使いたいのに、戻り値を使っていない場合です。

def make_message():
    message = "Python"


make_message()
print(message)

この場合も、message は関数の中のローカル変数なので、外では使えません。関数の外でも使いたいなら、return で返す形を考える必要があります。

9. 練習用コード

次のコードを practice_scope.py として保存して実行してください。

city = "東京"


def show_city():
    city = "大阪"
    print("関数の中:", city)


show_city()
print("関数の外:", city)

実行したあとで、関数の中と外でどちらの値が表示されるか確認してください。

余裕があれば、関数 show_city() の中で別のローカル変数 country を作り、関数の外で print(country) を書いたらどうなるか試してください。

10. この回で理解しておくこと

  • スコープは変数を使える範囲のこと
  • ローカル変数は関数の中でだけ使える
  • グローバル変数は関数の外で作られる
  • 同じ名前でも、関数の中と外では別の変数になることがある
  • 関数の外で使いたい値は、ローカル変数のままではなく、必要に応じて戻り値で扱う

11. まとめ

今回は、スコープとローカル変数の基本を確認しました。変数は、名前だけでなく、どこで作られたかによって使える範囲が決まります。

関数の中の変数と外の変数を区別して読めるようになると、コードの動きを正しく追いやすくなります。まずは、ローカル変数は関数の中だけ、グローバル変数は関数の外にある、という基本を整理してください。

12. 次回予告

次回は、モジュールを使って機能を増やす方法を学びます。import を使って、Pythonに用意されている機能を使う基本を確認します。

復習してみよう

復習したい方は、こちらもあわせてご覧ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

のいのアバター のい UNIX Cafe マスター

Macintosh Color Classicから始まった旅は、長いWindows時代を経て、Windows10のサポート終了をきっかけにUNIXの世界へ戻ってきました。UNIX Cafeでは、UNIX・Linux・そしてMacな世界を、むずかしい言葉を使わず、物語のように書いています。プログラミングは、アイデアをコンピューターに伝えるための言葉です。簡単な単語と文法を覚えれば、誰でもコマンドを使えます。ぜひ一度、やさしいプログラミングの世界をのぞいてみてください。

Created by UNIX Cafe

目次