018:予約語
予約語とキーワード
以下の名前は Python 2.5 における予約語、もしくはキーワードであるため、 識別子(変数名など)として使えない、もしくは将来使えなくなるものです。
and |
as |
assert |
break |
class |
continue |
def |
del |
elif |
else |
except |
exec |
finally |
for |
from |
global |
if |
import |
in |
is |
lambda |
not |
or |
pass |
raise |
return |
try |
while |
with |
yield |
このうち as と with はまだ使えるものの使うべきでない名前となります。 これらを使おうとすると Python 2.5 では警告が出力されます(2009/01 追記: with_statement機能をfuture文によって有効にしたときは使用できません)。 Python 2.6 および 3.0 以降では使えなくなる予定です(2009/01 追記:使えなくなりました)。
その他の名前は識別子として使うことはできません。
このリストは keyword モジュールの kwlist リストにて確認することができます。:
>>> import keyword
>>> keyword.kwlist
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'els
e', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in',
'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while',
'with', 'yield']
また keyword モジュールの iskeyword 関数にて、ある文字列が予約語・キーワードかどうか確認できます。:
>>> import keyword
>>> keyword.iskeyword('except')
True
>>> keyword.iskeyword('catch')
False
実は予約語でないもの
意外なことに、 None, True, False は予約語・キーワードではありません。 None はビルトインオブジェクトのひとつ、ヌルオブジェクトを示す名前です。これは将来キーワードになる予定があります。 Python 2.5 の時点でもすでに特別扱いされており変数名として用いることができません。
True, False はビルトインオブジェクト(CPython 2.5 の実装では整数型の 1 と 0 が特別扱いされているもの)の名前という点では None と同様なのですが こちらは字句解析レベルの制限がとくに課されていなく、変数名として用いてしまうことが可能です。
キーワード追加の歴史
yield は Python 2.2 からジェネレーターの宣言構文のために追加されました。
as は import 文の構文として以前から使われていましたが、 Python 2.5 から後処理を記述するための with 文のためにキーワードとなりました。
with は Python 2.5 から後処理を記述するための with 文のため追加されました。