2013/02/11

Python の変数名のつけ方

Python の変数名のつけ方に関するルールについてご紹介します。

Python の変数の名前( identifier/name )には次の 3 種類の文字を使うことができます。
  1. a ~ z のアルファベット(大文字も可)
  2. 0 〜 9 の数字
  3. _ (アンダースコア)
名前の長さに関する制限はないため、 100 字を越える極端に長い名前をつけることも可能です(実用性の面でそうすることは無いと思います)。

また、名前の文字列としての制約として次の 2 つがあります。
  • 最初の文字を数字にすることはできない
  • 予約語/キーワードと同じ名前は使えない

「最初の文字を数字にすることはできない」というのは、たとえば、次の例を見ていただくとわかりよいかと思います。

OK:
x
abc
variable
x1
y1

NG:
1x
2x
123x

「予約語/キーワードと同じ名前は使えない」というのは、「 if 」や「 for 」といった、 Python の文法上特殊な意味を持つ単語は使うことができない、という意味です。「 if 」「for」以外にも Python では次のような単語が特殊な意味を持つもの(いわゆる「予約語」「キーワード」)として登録されています。
  • and
  • as
  • assert
  • break
  • class
  • continue
  • def
  • del
  • elif
  • else
  • except
  • exec
  • finally
  • for
  • from
  • global
  • if
  • import
  • in
  • is
  • lambda
  • not
  • or
  • pass
  • print
  • raise
  • return
  • try
  • while
  • with
  • yield
詳しくは公式ドキュメントの予約語/キーワードの説明や次の記事等をご覧ください。


また、次のような名前にも特殊な意味が与えられているので注意が必要です。
  • _* (アンダースコアひとつで始まる名前)
  • __* (アンダースコアふたつで始まる名前)
  • __*__ (アンダースコアふたつで始まりアンダースコアふたつで終わる名前)
ですので、 _ から始まる名前を不用意に使うことのないようにしましょう。このあたりに関する公式ドキュメントの記述はこちらにあります。

制限としては以上となりますが、あと 2 点ほど、実際にコードを書く際に気をつけたいポイントがあります。

ひとつは、「 慣用的に推奨されている命名ルールに従う 」ということ。たとえば次のようなルールが Python コミュニティでは標準となっています。
  • 関数の名前であれば lower_case_with_underscores にする
  • クラス名は CapitalizedWords にする
このルールを守らなくてもプログラムの動作という意味では特に問題は生じませんが、読みやすさ・わかりやすさに影響します。このあたりのところについては、 PEP 8 などでも言及されているので興味のある方は深掘りしてみてください。

もうひとつ大事なことは、「 デフォルトの関数を上書きしない 」ということです。 Python の場合、デフォルトで用意されている関数名等も所詮は名前なので、コード内で他の用途に使用することができます。

たとえば、デフォルトで用意されている関数に使われている名前に「 id 」や「 type 」というものがあります。
x = 10

print type(x)  # => int
print id(x)  # => 10411020
これらに別の値を代入しても、インタプリタはそのまま通してしまいます。
type = 'abc'
id = 5
表面上は問題無いように見えますが、これをしてしまうと、そのスコープの中では以後 type() 関数 id() 関数が使えなくなってしまうので、このようなことが無いように注意が必要です。

変数名のつけ方に関する公式ドキュメントの記述はこちらにあります。そちらもあわsてご覧ください。


参考

0 件のコメント: