変数の名前付け

概要

変数名はその変数にどのようなデータが入っているかを示しています。 そのため、正しい変数名を付けるとプログラムが何をやっているか分かりやすくなります。

変数名のつけかたにはPythonの文法上のルールを守った上で、分かりやすいものを付けるのが鉄則です。 変数名は「アルファベット、数字、アンダーバー」のみで構成されており、 一般的には英単語をアンダーバー「_」区切りで使います。 短いサンプルプログラムなどを除けば、変数名に「a」などといった用途が分からないものを使うことは避けて下さい。

Pythonの文法が利用する「if」といった予約語や、 「str」「print」といった既に定義されているキーワードを変数として使わないでください。 プログラムがエラーになったり、関数が本来の動きと異なる動きをしたりするようになります。

変数名の重要性

プログラムは長いものだと1万行以上となります。 今後学んでいく関数やクラス、モジュールといった機能でプログラムは整理されるものの、 そのなかで使われる変数の数は膨大なものとなります。

そのような状況で変数に分かりにくい名前をつけると、その変数になにが入っているか分からなくなってきます。 例えば人の年齢をいれる変数に「a」という変数名を使うのと「age」という変数名を使うのでは、 後者のほうが分かりやすいはずです。

また、複数のプログラマの間で「この変数名はこういったものに使いましょう」というルールを守ると、 変数名を見ただけでそれがどういったデータを持っているかが瞬時に分かります。

プログラミングの文法としては、変数名はさほど重要ではありません。 変数名に「a」を使おうと、「age」を使おうと問題なく動作します。

ただ、プログラムを書く人間にとって分かりにくい名前を使うと、間違って捉えてしまったり、 読み解くのに余計な時間がかかるといった問題がおきます。

プログラムの開発をスムーズに行うためにも、変数名の付け方には注意を払って下さい。

変数名のルール

変数名の名付け方にはいくつかの文法上の規則があります。 これらの規則を破った変数名を使うとプログラムでエラーが発生します。

規則は以下のものとなります。

  • 予約語でないこと
  • アルファベット(大文字、小文字)か、アンダーバーから始まること
  • アルファベット、数字、アンダーバーから構成されていること

予約語は変数名にできない

予約語 」はPythonの文法において特別な意味を持つキーワードのことです。 たとえば条件分岐に利用する「if」「else」といったものです。 これらを変数名として使おうとすると、予約語が間違った使い方をされているとPythonが解釈してしまうため、 プログラムの実行の前の文法チェックでエラーが発生してしまいます。

>>> name = 'taro'
>>> if = 'taro'
  File "<stdin>", line 1
    if = 'taro'
       ^
SyntaxError: invalid syntax

また、予約語ではありませんが既に定義されている関数名などを変数名として使うこともしないでください。 たとえば関数「print」を変数名として使うこともできますが、それをやると関数のprintが使えなくなります。

>>> print('hello python')
hello python
>>> print = 'taro'
>>> print('hello python')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable

変数名には決められた文字しか使えない

変数名に使うことができる文字は「アルファベットの大文字と小文字」「数字」「アンダーバー」となり、 これらを組み合わせて変数名とします。 他の記号などを変数名に加えるとエラーとなります。

>>> user_name = 'taro'
>>> user$_name = 'taro'
  File "<stdin>", line 1
    user$_name = 'taro'
        ^
SyntaxError: invalid syntax

変数名に数字は使えるのですが、変数名の1文字目には数字は使えないというルールもあります。 「user_name1」は正しい変数名ですが、「1user_name」は間違った変数名ですのでエラーとなります。

>>> user_name1 = 'taro'
>>> 1user_name = 'taro'
  File "<stdin>", line 1
    1user_name = 'taro'
             ^
SyntaxError: invalid syntax

実は全角文字もPythonの変数で使えるため、日本語の変数を作ることもできます。 ただ、プログラミング一般として日本語の変数名は使いませんので、 余計なトラブルを避けるためにも全角文字の利用は避けることが無難です。

>>> あいうえお = 'hello python'
>>> print(あいうえお)
hello python

変数名の付け方

サンプルプログラムでは、変数名に「a」や「abc」といった意味のない名前をつけることがよくあります。 これはPythonの文法という観点では間違っていませんが、プログラムの見通しが悪くなる変数名です。

実際のプログラミングを行う際は、先の文法ルール以外にも、 以下のルールを守って変数名をつけることが推奨されています。

  • 分かりやすい変数名にする
  • 名詞を使う
  • 大文字は使わずに、アンダーバーで単語を区切る(python流)
  • 理由なくアンダーバーから始まる変数名は使わない(特別な意味を持つ)

分かりやすい変数名

年齢を持つ変数名は「age」といった年齢を示す単語を使うべきです。 たとえば「age」や「user_age」といったものです。

年齢を持つ変数名に「name」などという中身と全く異なる変数名をつけるのはよくありません。 そのプログラムを読んだ人は読み違えるか、プログラムのバグだと判断するはずです。

Pythonでは変数名にアルファベットの大文字は一切使わないのが一般的です。 変数名の1文字めをアルファベットの大文字にするのは「クラス」の命名規則なので、 1文字めを大文字にするとクラスと間違われる可能性があります。

変数名には名詞を使う

変数はデータを保持しています。 一方、これから学ぶ関数やメソッドなどはなんらかの処理をする(アクションをおこす)ために使われます。

その違いから、変数には英語の名詞(nameやageなど)を使い、関数やメソッドには動詞(addやcutなど)を使います。 変数名に動詞を使うと関数と紛らわしくなるため、変数名には動詞ではなく名詞をつけるようにしてください。

単語の区切りにはアンダーバーを使う

長いプログラムで変数名をつける場合は、英語の1単語だけでは足りない場合があります。

たとえば会社のシステムで「name」という変数名を使った場合、 それは「お客さんの名前」なのか「社員の名前」なのか分からない場面があるかもしれません。 そのような場合には「customer_name」と「employee_name」といったように、 複数単語を使うことでより具体的な変数名をつけるようにしてください。

単語の区切りはPythonではアンダーバーを使うのが一般的です。 C言語やJava言語では「customerName」といったように区切りを大文字にするのが一般的ですが、 Pythonの変数名では一般的ではありません。

アンダーバーから変数名を始めない

Pythonには「特殊属性」と呼ばれる機能が存在します。 ここでは解説は控えますが、これはアンダーバーから始まる名前を持っています。

アンダーバーから始まる名前をつけると、 Pythonに詳しい人がそれを見た際に「何か特別な意図がある」と勘違いするかもしれません。 意図的に使う場合を除いてはアンダーバーから始まる変数名は使わないでください。

変数名の例

以下に変数名の良い例と悪い例を示します。

# 1単語の場合
student = 'taro' # OK : 小文字のみで構成
Student = 'taro' # 大文字スタートなのでNG
a = 'taro'       # a が何か分からないのでNG

# 2単語の場合
student_name = 'taro' # OK : 小文字の単語間を _ で区切る
studentName = 'taro'  # NG : 単語の区切りを大文字に
                      #      するのは Python 流でない

# 先頭が _ から始まる
# 特別な意味があるため、初心者向けではない
_student = 'taro'   # 他の人に「これを使わないで下さい」と示す
__student = 'taro'  # 文法として外から使えなくする