Pythonでプログラミングを行う際、変数、関数、クラスには自由に名前を付けることができますが、唯一の例外があります。それは、Pythonの文法自身が使用するために「予約」されている単語群、すなわち**予約語(キーワード)**です。
これらの単語は、プログラムの構造(もし~ならば、~の間繰り返す、など)を定義するために使われるため、変数名などの識別子として使用することができません。
この記事では、Pythonの予約語とは何か、なぜ使えないのか、そしてどのような単語があるのかについて解説します。
予約語を変数名として使用した場合
もし予約語を変数名として使用しようとすると、Pythonのインタプリタはそれを文法エラー(SyntaxError)として認識し、プログラムは実行されません。
エラーが発生する例:
# 予約語 'if' を変数名として使おうとする
# if = 100
# SyntaxError: invalid syntax
# 予約語 'def' を関数名ではなく変数名として使おうとする
# def = "function_name"
# SyntaxError: invalid syntax
# 予約語 'for' を変数名として使おうとする
# for_count = 5 # これはOK ('for' そのものではない)
# for = 5 # SyntaxError: invalid syntax
for_count のように、予約語が名前の一部として含まれるのは問題ありません。あくまで予約語そのものを名前として使うことが禁止されています。
主な予約語の分類と代表例
Pythonの予約語は、その機能によって分類できます。以下に代表的なものを示します。
1. 制御フロー(流れの制御)
プログラムの実行順序を制御します。
if,elif,else(条件分岐)for,while(繰り返し)break,continue(ループの中断・スキップ)pass(何もしないことを明示)
2. 関数・クラス(構造の定義)
関数やクラス(設計図)を定義するために使われます。
def(関数定義)return(値を返す)class(クラス定義)lambda(無名関数)
3. モジュール(コードの読み込み)
他のファイル(モジュール)を読み込むために使われます。
import(モジュールの読み込み)from(モジュールから特定の機能を読み込み)as(別名を付ける)
4. 論理・値(特別なデータ)
真偽値や「何もない」ことを示す特別な値です。これらも変数名にはできません。
True(真)False(偽)None(値が存在しない)and,or,not(論理演算子)
5. 例外処理(エラー対応)
エラーが発生した際の処理を定義します。
try,except,finallyraise(意図的にエラーを発生させる)
予約語と「組み込み関数」の違い
Pythonには予約語とよく似ていますが、異なるものとして「組み込み関数」や「組み込み型」があります。
例: print(), len(), str(), list(), sum()
これらは予約語ではないため、文法的には変数名として使用しても SyntaxError にはなりません。
しかし、これらの名前を変数名として使用すると、Pythonが標準で提供している本来の機能が、その変数によって上書きされてしまいます。その結果、プログラムの後半で本来の機能を使おうとした際に TypeError などの予期せぬエラーを引き起こします。
# 'list' は予約語ではない(組み込み型)
list = [10, 20, 30] # SyntaxError にはならないが、非推奨
print(list) # 変数 'list' の中身 [10, 20, 30] が表示される
# 本来の list() 関数(型変換)を使おうとするとエラーになる
# numbers = list("123")
# TypeError: 'list' object is not callable
このように、list や str などの組み込み関数・型の名前を変数名として使用することは、技術的に可能であっても、深刻なバグの原因となるため厳格に避けるべきです。もし名前が衝突する場合は、my_list や list_ のように名前を変えるのが一般的です。
まとめ
- 予約語(キーワード)は、Pythonの文法そのものを構成する単語(
if,for,defなど)です。 - 予約語を変数名、関数名、クラス名として使用することはできず、
SyntaxErrorとなります。 listやstrなどの「組み込み関数」は予約語ではありませんが、変数名として使うと元の機能を上書きしてしまうため、使用は避けるべきです。
