2026年10月13日、次のPythonとなる3.16の最初のアルファ版、3.16.0a1が公開されました。Python 3.15の正式版が出たのが10月9日なので、そのわずか4日後のことです。
3.16のリリース日程を定めたPEP 826によると、正式版の公開は2027年10月5日の予定です。ここから約1年かけて、新しい機能が少しずつ加わっていきます。
アルファ版はまだ開発の途中で、普段の学習や仕事に使うものではありません。それでも、どんな変更が入り始めているのかを知るのは楽しいものですよね。
今回は、3.16.0a1を実際に動かしながら、早くも入った変更を見ていきます。
まずは3.16の日程を確認しよう¶
最初に、PEP 826に書かれた3.16の主な日程を表にまとめます。アルファ版からベータ版、候補版を経て、正式版へと進みます。
| 段階 | 日程 | 意味 |
|---|---|---|
| 開発開始 | 2026年5月7日 | 3.15のベータ1と同時に、3.16の開発が始まった |
| アルファ1 | 2026年10月13日(公開済み) | 最初の試験版 |
| アルファ2〜7 | 2026年11月〜2027年4月(予定) | 約1か月ごとに新機能が加わる |
| ベータ1 | 2027年5月4日(予定) | ここで新機能の追加は締め切り |
| 候補版1 | 2027年7月27日(予定) | ほぼ完成した状態での最終確認 |
| 正式版 | 2027年10月5日(予定) | 一般に使い始められる |
PEP 826によると、3.16はおよそ2032年10月まで、セキュリティ修正を受けられる予定です。リリースマネージャー、つまり3.16の公開作業の責任者は、Savannah Ostrowskiさんが務めます。
ひとつ前の3.15がどんなバージョンだったかは、こちらで実際に動かしながら紹介しました。【関連記事】Python 3.15が正式リリース
アルファ版とはどんなものか¶
アルファ版は、開発中の機能を早めに試してもらうための版です。機能はまだ固まっておらず、正式版までに変わったり、取り下げられたりすることもあります。
What's new in Python 3.16という文書の冒頭にも、この文書はまだ草稿で、3.16の開発が進むにつれて大きく更新されると書かれています。今回紹介する内容も、正式版までに変わる可能性があることを頭に入れて読んでください。
3.16.0a1を実際に動かしてみた¶
では、さっそく試してみましょう。今回は、uvを使ってPython 3.16.0a1を入れました。uvは10月14日の0.13.1で、3.16.0a1に対応しています。
import math
import sys
print(sys.version.split()[0])
# iter() に stop_exception を指定する
tasks = ["メール確認", "資料作成", "会議"]
for task in iter(tasks.pop, stop_exception=IndexError):
print("処理:", task)
# 半回転を単位にした三角関数
print(math.sin(math.pi), math.sinpi(1))
print(math.cos(math.pi / 2), math.cospi(0.5))
3.16.0a1で実行した結果です。3.15以前では、iter()のstop_exceptionやmath.sinpi()がないので、エラーになるコードです。
3.16.0a1
処理: 会議
処理: 資料作成
処理: メール確認
1.2246467991473532e-16 0.0
6.123233995736766e-17 0.0
それぞれの結果を、順番に見ていきましょう。
uvでのPythonの入れ方は、こちらで紹介しています。【関連記事】uvとは?Rust製の高速Pythonパッケージ管理ツール
iter()に、例外で止める引数が加わった¶
What's newによると、iter()に新しくstop_exceptionという引数が加わりました。関数を繰り返し呼び出し、指定した例外が起きたところで繰り返しを止めます。
先ほどの例では、リストのpop()を繰り返し呼んでいます。リストが空になると、pop()はIndexErrorを出すので、そこで自然にforループが終わりました。
これまでの書き方と比べると¶
iter()には、もともと2つの引数を渡す使い方がありました。2つ目に渡した値と同じものが返ってきたら止まる、という仕組みです。
ただし、値で止めるこれまでの書き方では、例外で終わるタイプの関数をうまく扱えませんでした。stop_exceptionを使えば、try文を書かずに、例外が起きるまで繰り返す処理を1行で書けます。
What's newには、2つ目の引数の名前がstop_valueになり、キーワードでも渡せるようになったとも書かれています。非同期版のaiter()にも、同じstop_valueとstop_exceptionが加わりました。
mathに、半回転を単位にした三角関数が加わった¶
もう1つの例が、mathモジュールの新しい関数です。What's newによると、角度を半回転、つまり180度を1とする単位で扱う三角関数が加わりました。
追加された関数を、表にまとめます。
| 種類 | 関数 |
|---|---|
| 角度を受け取る | math.sinpi()、math.cospi()、math.tanpi() |
| 角度を返す | math.asinpi()、math.acospi()、math.atanpi()、math.atan2pi() |
What's newでは、これらはIEEE 754-2019という浮動小数点数の国際規格で推奨され、C23というC言語の規格でも標準化されていると説明されています。
なぜ便利なのか¶
先ほどの結果を見てください。math.sin(math.pi)は、本当は0のはずなのに、1.2246467991473532e-16というごく小さな値になりました。
これは、円周率のπがコンピューターの中では近似値でしか表せないことによる、小さな誤差です。math.sinpi(1)なら、πを使わずに180度を表せるので、きちんと0.0が返ってきました。
円周率とmathモジュールの基本は、こちらで紹介しています。【関連記事】Pythonの円周率math.piとは?
selfを書き忘れると、教えてくれるようになった¶
初心者にとって、いちばん嬉しいのはこの変更かもしれません。What's newによると、メソッドの定義でselfを書き忘れたときのエラーメッセージに、ヒントが付くようになりました。
実際に、selfを書き忘れたクラスを用意して、3.16.0a1で動かしてみました。
class Greeter:
def hello():
return "hi"
Greeter().hello()
3.16.0a1で実行したときの、エラーの最後の行です。
TypeError: Greeter.hello() takes 0 positional arguments but 1 was given. Did you forget the 'self' parameter in the function definition?
同じコードを手元のPython 3.11で動かすと、TypeError: Greeter.hello() takes 0 positional arguments but 1 was givenで終わり、ヒントは出ませんでした。3.16では、selfを書き忘れていないかと、原因を直接教えてくれます。
なぜ引数が1つ渡されたことになるのか¶
渡した引数はないのに、1つ渡されたと言われて戸惑った経験はありませんか。これは、Greeter().hello()と呼ぶと、Pythonがインスタンス自身を最初の引数として自動で渡すためです。
その受け取り口がselfです。selfを書き忘れると、受け取る場所がないのに1つ渡されてしまい、このエラーになります。
私は10年ほどエンジニアとして開発に関わってきましたが、新人の方から最も多く受けた質問の1つが、まさにこのエラーでした。エラーメッセージが原因まで教えてくれるのは、学ぶ人にとって本当に大きな助けになります。
selfやクラスの基本については、こちらで解説しています。【関連記事】Pythonのオブジェクト指向とは?
そのほかの変更¶
What's newには、ほかにも標準ライブラリの改善がたくさん並んでいます。初心者にも関係しそうなものを紹介します。
csv.Sniffer.sniff()は、CSVの区切り文字などを推測する方法が変わりました。これまでの推測の仕方ではなく、実際に読んでみて判断するようになり、csv.reader()の読み方と結果がそろうようになったそうです。
正規表現では、\d+のようなパターンの照合が速くなりました。What's newによると、\dや\sのような文字クラスが、より効率のよい形に変換されるようになったためです。
今後のアルファ版でも、新しい機能が少しずつ加わっていく予定です。ベータ1の2027年5月4日までが、新機能を追加できる期間です。
3.16で削除された主な機能¶
What's newには、新機能だけでなく、削除された機能も並んでいます。多くは3.14や3.13で非推奨になっていたもので、予告どおり取り除かれました。
初心者にも関係しそうなものを、表にまとめます。
| 削除されたもの | 代わりに使うもの |
|---|---|
| asyncio.iscoroutinefunction() | inspect.iscoroutinefunction() |
| asyncioのイベントループポリシーの仕組み | asyncio.run()やasyncio.Runnerのloop_factory |
| arrayの'u'という型コード | 'w'という型コード |
| functools.reduce()にキーワード引数で渡す書き方 | 位置引数で渡す |
予告はちゃんと出ていた¶
実際に、3.16.0a1でasyncio.iscoroutinefunctionがあるかを調べると、Falseと表示されました。本当に取り除かれています。
同じ関数を3.15.0で呼ぶと、'asyncio.iscoroutinefunction' is deprecated and slated for removal in Python 3.16という警告が出ました。削除される前に、きちんと予告されていたわけです。
普段から警告を読む習慣をつけておけば、こうした削除に慌てずに済みます。
警告の読み方や、警告をエラーにして洗い出す方法は、こちらで詳しく解説しています。【関連記事】Pythonのwarningsとは?
学習者はどう付き合えばいいのか¶
最後に、学習者がアルファ版とどう付き合えばよいかを整理します。
結論から言うと、普段の学習には、正式版の3.15か3.14を使ってください。アルファ版は、機能が変わったり、不具合が残っていたりするからです。
一方で、新しい機能に興味がある方は、仮想環境に3.16.0a1を入れて試してみるのも楽しい経験になります。uvを使えば、今の環境を壊さずに並べて入れられます。
まとめ¶
2026年10月13日、Python 3.16の最初のアルファ版、3.16.0a1が公開されました。正式版は2027年10月5日の予定で、ここから約1年かけて新機能が加わっていきます。
selfの書き忘れを教えてくれるエラーメッセージ、iter()のstop_exception、math.sinpi()など、早くも面白い変更が入り始めています。正式版までの1年、少しずつ変わっていくPythonを一緒に追いかけていきましょう。
ここまでお読みいただきありがとうございました。