Pythonの変数と関数、クラスを瞬時に見分ける!新人エンジニアのためのコード読解術

こんにちは。ゆうせいです。

プログラムのコードを読んでいて、「この単語はいったい何者なんだ…?」と手が止まってしまった経験はありませんか?特にPythonはシンプルに書ける分、変数なのか、関数なのか、はたまたクラスなのか、一見すると見分けがつきにくいことがあります。

ご安心ください!実は、いくつかのポイントさえ押さえれば、誰でも簡単に見分けられるようになります。今回は、新人エンジニアのあなたのために、Pythonのコードに登場する主要な要素(ローカル変数、グローバル変数、関数、クラス)を一目で見分ける方法を、わかりやすく解説していきますね。

まずは基本の「キーワード」に注目しよう!

コードをパッと見たときに、何よりも先に注目してほしいのが「キーワード」です。キーワードは、Pythonの文法上、特別な意味を持つ予約された単語のこと。これを知っているだけで、見分けがグッと楽になりますよ。

  • def: これがあったら、それは「関数」の始まりの合図です。def の後ろには、必ず関数名が続きます。
  • class: これがあったら、それは「クラス」の始まりの合-図です。class の後ろには、必ずクラス名が続きます。
# これは関数の定義
def my_function():
    print("これは関数です")

# これはクラスの定義
class MyClass:
    def my_method(self):
        print("これはクラスの中のメソッドです")

どうでしょう?defclass を見つけるだけで、コードの大きな構造が見えてきませんか?まずはこの2つのキーワードを探す癖をつけてみましょう。

命名規則(ネーミングルール)という大きなヒント

Pythonには、コードを読みやすくするためのお作法集である「PEP8(ペップエイト)」というスタイルガイドがあります。世界中のPythonエンジニアがこのルールに従ってコードを書いているため、命名規則を知っていると、その名前が何を表しているのかを推測できるのです。

関数と変数の見分け方:スネークケース

関数と変数は、どちらも snake_case(スネークケース)で命名するのが一般的です。これは、単語と単語をアンダースコア _ でつなぐ書き方です。

  • 関数名: calculate_total_price, get_user_name
  • 変数名: user_name, item_price

「あれ、どっちも同じ書き方なの?」と思いましたか?その通りです。だからこそ、先ほどのキーワード def が重要になるのです。

# def があるから、これは関数
def send_email():
    # 関数の中で = を使って代入されているから、これはローカル変数
    email_address = "test@example.com"
    print(email_address)

# 関数の外で = を使って代入されているから、これはグローバル変数
user_id = 123

関数名も変数名もスネークケースですが、def の直後にあるのが関数名、そして関数の中や外で = を使って値を代入されているのが変数、と見分けることができます。

クラスの見分け方:キャメルケース

一方で、クラスは CamelCase(キャメルケース)または PascalCase(パスカルケース)と呼ばれる、各単語の頭文字を大文字にする書き方をします。

  • クラス名: UserModel, ProductItem, HttpRequest

先ほどの snake_case とは明らかに見た目が違いますよね。そのため、単語の頭文字が大文字になっている名前を見つけたら、「これはクラスだな」とすぐに判断できます。

# 頭文字が大文字のキャメルケースだから、これはクラス
class UserProfile:
    pass

# 小文字とアンダースコアのスネークケースだから、これは変数(このクラスのインスタンス)
user_profile = UserProfile()

ローカル変数とグローバル変数の違いは「場所」で見分ける

さて、defclass が付いていない名前は「変数」だと分かりました。しかし、変数には「ローカル変数」と「グローバル変数」の2種類があります。この2つは、その変数が使える範囲(スコープ)が異なります。

ローカル変数:関数の中だけで生きる変数

「ローカル変数」は、関数の中で定義された変数のことです。その名の通り、とても局所的(ローカル)で、定義された関数の中だけでしか使えません。関数が終了すると、その変数は消えてしまいます。

料理に例えるなら、ある料理(関数)を作るためだけに取り出したボウルやお皿のようなものです。その料理が終われば、片付けてしまいますよね。

def calculate_area():
    # width と height は calculate_area 関数の中だけで使えるローカル変数
    width = 10
    height = 5
    area = width * height
    print(area)

calculate_area()

# 関数の外からローカル変数を使おうとするとエラーになる!
# print(width)  # NameError: name 'width' is not defined

グローバル変数:プログラム全体で使える変数

「グローバル変数」は、関数の外側(プログラムのトップレベル)で定義された変数です。グローバル変数は、プログラムのどこからでもアクセスできます。

これは、キッチンのコンロや冷蔵庫のように、どんな料理を作るにしても共通で使える道具、とイメージすると分かりやすいかもしれません。

# tax_rate はプログラム全体で使えるグローバル変数
tax_rate = 0.1

def calculate_price_with_tax(price):
    # 関数の中からグローバル変数を参照する
    total_price = price * (1 + tax_rate)
    print(total_price)

calculate_price_with_tax(1000)

print(tax_rate) # もちろん関数の外からも使える

ただし、グローバル変数は便利ですが、どこからでも変更できてしまうため、多用するとプログラムが複雑になり、バグの原因になりやすいというデメリットもあります。基本はローカル変数を使い、本当に必要な場合のみグローバル変数を使うように心がけましょう。

まとめ:見分けるためのチェックリスト

それでは、これまでの内容を表にまとめてみましょう。コードの中で謎の単語に出会ったら、この表をチェックしてみてください。

種類見分けるポイント命名規則(PEP8)
クラスclass キーワードの直後にある。CamelCase (例: UserModel)
関数def キーワードの直後にある。呼び出すときに () が付く。snake_case (例: get_user_name)
ローカル変数関数の内部で = を使って値が代入されている。snake_case (例: item_price)
グローバル変数関数の外部(トップレベル)で = を使って値が代入されている。snake_case (例: app_version)

今後の学習の指針

今回は、Pythonの基本的な要素を見分ける方法を学びましたね。この知識は、他の人のコードを読んだり、エラーメッセージを解読したりする際に、必ずあなたの助けになります。

次にステップアップするためには、以下の点について学習を進めていくのがおすすめです。

  1. スコープのルール(LEGBルール): Pythonが変数を探す順序には「LEGB」というルールがあります。これを理解すると、なぜその場所でその変数が使えるのか(または使えないのか)がより深く分かります。
  2. クラスの継承: クラスは他のクラスの機能を引き継ぐ(継承する)ことができます。class NewClass(BaseClass): のように書かれているコードが何をしているのかを学んでみましょう。
  3. モジュールとインポート: import というキーワードが出てきたら、それは他のファイル(モジュール)に定義された変数や関数、クラスを読み込んで使っている証拠です。

最初は戸惑うことも多いと思いますが、コードをたくさん読んで、実際に自分で書いていくうちに、自然とこれらの違いが見分けられるようになっていきます。焦らず、一歩ずつ進んでいきましょう。応援しています!


セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。