この記事では、Python の予約語と組み込み関数について解説しています。これらと同じ変数名や関数名は付けないように気をつけましょう!
ソースコード内で任意の文字列が識別子として使用できるかを確認することも可能です。
予約語とは、識別子(クラス名や関数名や変数名)に使えない文字列のこと を言います。
例えば、if
という変数を定義すると呼び出した if
が条件分岐するためなのか、変数なのかわからなくなってしまいます。なので、あらかじめ予約語として識別子に利用できないようにしておくことで無用なバグを防ぐことができます。
ちなみに、Python では予約語に値を代入すると SyntaxError
が送出されます。
if = 10
実行結果
File "/Users/user/Desktop/Python/test.py", line 1
if = 10
^
SyntaxError: invalid syntax
キーワードとは、言語仕様上特別な意味を持った語のことです。Python の予約語には、キーワードしかないので特に区別する必要ないです。
予約語は keyword.kwlist
にリストとして格納されています。
import keyword
print(keyword.kwlist)
実行結果
['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']
Python 3.10.0 では、以下のような予約語が定義されています。
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 |
組み込み関数とは、言語が標準で用意してくれている関数のこと を言います。Python 3.10.0 では、以下のような組み込み関数が定義されています。
abs | aiter | all | any | anext | ascii | bin | bool |
breakpoint | bytearray | bytes | callable | chr | classmethod | compile | complex |
delattr | dict | dir | divmod | enumerate | eval | exec | filter |
float | format | frozenset | getattr | globals | hasattr | hash | help |
hex | id | input | int | isinstance | issubclass | iter | len |
list | locals | map | max | memoryview | min | next | object |
oct | open | ord | pow | property | range | repr | |
reversed | round | set | setattr | slice | sorted | staticmethod | str |
sum | super | tuple | type | vars | zip | __import__ |
組み込み関数と同じ名前のオブジェクトを生成してもエラーにならない。しかし、組み込み関数が呼び出せなくなってしまうので注意。
print = '文字列'
print('出力')
実行結果
Traceback (most recent call last):
File "/Users/user/Desktop/Python/test.py", line 2, in
print('出力')
TypeError: 'str' object is not callable
上記コードでは、print()
関数 を呼び出しているつもりが、文字列を格納した print
変数 を呼び出しているので実行できなくてエラーが発生しています。
View Comments