Pythonのキーワード(予約語)一覧を確認するkeyword
Pythonのキーワード(予約語)の一覧は標準ライブラリのkeywordモジュールで確認できる。
キーワード(予約語)は変数名、関数名、クラス名などの名前として使えない。
ここでは以下の内容について説明する。
- Pythonのキーワード(予約語)の一覧を取得
- 文字列がキーワード(予約語)であるか確認
- キーワードと予約語の違い
最後に述べるように、キーワードと予約語は厳密には異なる概念。
以下のサンプルコードはPython3.7.3を使っている。バージョンによってはキーワード(予約語)が異なる場合があるので注意。
Pythonのキーワード(予約語)の一覧を取得
keyword.kwlist
にPythonにおけるキーワード(予約語)の一覧がリストとして格納されている。
以下の例では出力を見やすくするためにpprintを使っている。
import keyword
import pprint
print(type(keyword.kwlist))
# <class 'list'>
print(len(keyword.kwlist))
# 35
pprint.pprint(keyword.kwlist, compact=True)
# ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break',
# 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for',
# 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not',
# 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
リストの要素は文字列。
print(keyword.kwlist[0])
# False
print(type(keyword.kwlist[0]))
# <class 'str'>
これらの名前を識別子(変数名、関数名、クラス名など)として使おうとするとエラーになる。
# True = 100
# SyntaxError: can't assign to keyword
文字列がキーワード(予約語)であるか確認
ある文字列がキーワード(予約語)であるかはkeyword.iskeyword()
で確認できる。
調べたい文字列を引数に指定すると、キーワードであればTrue
、キーワードでなければFalse
が返る。
print(keyword.iskeyword('None'))
# True
print(keyword.iskeyword('none'))
# False
キーワードと予約語の違い
ここまで特に区別せずに使ってきたが、厳密にはキーワード(keyword)と予約語(reserved word)は異なる概念。
- キーワード: 言語仕様上特別な意味を持った語
- 予約語: 文字列としては識別子のルールは満たしているが、識別子として使えない語
詳細は以下のリンクなどを参照。Javaではgoto
は予約語だがキーワードではないといった具体例も挙げられている。
予約語(よやくご、英: reserved word)とは、プログラミング言語において字句的には識別子(変数名、関数名、クラス名など)としてのルールを満たしているにもかかわらず、識別子にならない字句要素。
キーワードは言語仕様上特別な意味を持った語のことである。
キーワードであっても予約語でないこともあるし、その逆もある。
予約語 - Wikipedia
Keywords have a special meaning in a language, and are part of the syntax.
Reserved words are words that cannot be used as identifiers (variables, functions, etc.), because they are reserved by the language.
language agnostic - What is the difference between "keyword" and "reserved word"? - Stack Overflow
Pythonにおいては(少なくともPython3.7の時点では)すべてのキーワードが予約語でありキーワードの他に予約語はないので、特に区別せずに使っても問題ない(はず)。
識別子として使える名前については以下の記事も参照。