PEP 661(Sentinel Values、番兵値(ばんぺいち))が承認され、Python 3.15に実装される。
Pythonにおいて「Noneでは表現しきれない状態」をどう扱うかという問題に対し、番兵値(Sentinel value)の標準化がPEP 661として採用されたのである。これは一見地味だが、実務のコード品質に直結する重要な変更である。
これまでPythonでは、「引数が未指定なのか」「Noneが明示的に渡されたのか」を区別するのが難しかった。そのため開発者は次のように、独自の番兵値を作ることが多かった。
_sentinel = object()
def func(x=_sentinel):
if x is _sentinel:
print("未指定")
elif x is None:
print("Noneが明示された")
else:
print(x)
このような書き方は一般的ではあったが、毎回自作する必要があり、可読性や一貫性に課題があった。そこでPEP 661では、このパターンを言語として整理しようとしている。
この変更の本質は、Noneの役割を整理する点にある——
peps.python.org/pep-0661/