note.nkmk.me

Pythonのキーワード(予約語)一覧を確認するkeyword

Date: 2019-05-27 / tags: Python

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の時点では)すべてのキーワードが予約語でありキーワードの他に予約語はないので、特に区別せずに使っても問題ない(はず)。

識別子として使える名前については以下の記事も参照。

スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事