この項目では、プログラミング言語について説明しています。その他の用法については「パイソン (曖昧さ回避) 」をご覧ください。
Python (パイソン)は、主としてインタープリタ 的に実行される高水準 汎用プログラミング言語 である[ 4] 。
Pythonは1990年代初頭にグイド・ヴァン・ロッサム が開発し、1991年2月に0.9.0として公開された[ 5] [ 6] 。
最初にリリースされたPythonの設計哲学は、ホワイトスペース(オフサイドルール )の顕著な使用によってコード の可読性を重視している。その言語構成とオブジェクト指向 のアプローチは、プログラマ が小規模なプロジェクトから大規模なプロジェクトまで、明確で論理的なコードを書くのを支援することを目的としている。
Pythonは動的言語 で、動的型付き言語 であり、ガベージコレクション がある。構造化 (特に手続き型 )、オブジェクト指向 、関数型プログラミング を含む複数のプログラミングパラダイム をサポートしている。Pythonは、その包括的な標準ライブラリのため、しばしば「バッテリーを含む」言語と表現されている[ † 1] [ 7] 。
Pythonのインタプリタは多くのOSに対応している。プログラマーのグローバルコミュニティは、自由かつオープンソース [ † 2] のリファレンス実装 であるCPython を開発および保守している 。非営利団体であるPythonソフトウェア財団 は、PythonとCPythonの開発のためのリソースを管理・指導している。
Pythonはインタプリタ 上で実行することを前提に設計している。以下の特徴をもっている:
Pythonには、読みやすく、それでいて効率もよいコードをなるべく簡単に書けるようにするという思想が浸透しており、Pythonコミュニティでも単純で簡潔なコードをよしとする傾向が強い[ † 3] 。
Pythonの本体は、ユーザがいつも必要とする最小限の機能のみを提供する。基本機能以外の専門機能や拡張プログラムはインターネット上にライブラリとして提供されており、別途ダウンロードして保存し、必要なツールはこのツールキットからその都度呼び出して使用する[ † 4] 。
Pythonでは「あることをなすのに唯一の良いやり方があるはず」という哲学がある[ † 3] (参考:Perl 「やり方は一つじゃない」[ 8] )。
Pythonではプログラムの文書化(ソフトウェアドキュメンテーション )が重視されており、言語の基本機能の一部となっている。
PythonのドキュメントはPEP (Python Enhancement Proposal、ペップ[ 9] )と呼ばれる[ 10] 。
インデント が意味を持つ「オフサイドルール 」が特徴的である。
以下に、階乗 (関数名:factorial)を題材にC言語と比較した例を示す。
Pythonのコード:
def factorial ( x ): if x == 0 : return 1 else : return x * factorial ( x - 1 ) わかりやすく整形されたC言語のコード:
int factorial ( int x ) { if ( x == 0 ) { return 1 ; } else { return x * factorial ( x - 1 ); } } この例では、Pythonと整形されたC言語とでは、プログラムコードの間に違いがほとんど見られない。しかし、C言語のインデントは構文規則上のルールではなく、単なる読みやすさを向上させるコーディングスタイル でしかない。そのためC言語では全く同じプログラムを以下のように書くこともできる。
わかりにくいC:
int factorial ( int x ) { if ( x == 0 ) { return 1 ;} else { return x * factorial ( x - 1 ); } } Pythonではインデントは構文規則として決められているため、こうした書き方は不可能である。Pythonではこのように強制することによって、ソースコードのスタイルがその書き手にかかわらずほぼ統一したものになり、その結果読みやすくなるという考え方が取り入れられている。これについては賛否両論があり、批判的立場の人々からは、これはプログラマがスタイルを選ぶ自由を制限するものだ、という意見も出されている。
インデントによる整形は、単に「見かけ」だけではなく品質そのものにも関係する[ 11] 。例として次のコードを示す。
間違えたC:
このコードはC言語の構文規則上は問題無いが、インデントによる見かけのifの範囲と、言語仕様によるifの実際の範囲とが異なっているため、プログラマの意図が曖昧になる(前者は"y = 0;"がif文に包含され、後者は"{}"がないため"y = 0;"がif文に包含されない)。この曖昧さは、検知しにくいバグを生む原因になる。例としてはApple goto fail が挙げられる。
ソースコードを読む際、多くの人はインデントのような空白を元に整列されたコードを読み、コンパイラ のように構文解析しながらソースを読むものではない。その結果、一見しただけでは原因を見つけられないバグを作成する危険がある。
Pythonではインデントをルールとすることにより、人間が目視するソースコードの理解とコンパイラの構文解析の間の差を少なくすることで、より正確に意図した通りにコーディングすることができると主張されている[ 11] 。
Pythonは動的型付け システムをもつ。同時に任意の型ヒントを持っており外部ツールによる静的型チェックを可能にしている。
値自身が型を持っており、変数はすべて値への参照 である。
基本的なデータ型 として、論理型 ・整数 型・浮動小数点数 型・複素数 型・文字列型・バイト列型・関数型がある。整数型は(メモリの許す限り)無制限の桁数で整数計算が可能である。浮動小数点数型を整数型にキャストすると、小数点以下が切り捨てられる。
組み込みのコンテナ型 として、リスト 型、タプル 型、辞書 型、集合 型がある。リスト型および辞書型はミュータブル 、タプル型はイミュータブル である。集合型には変更可能なものと変更不能なものの2種類がある。タプル型とリスト型は、多くのプログラミング言語では配列 と呼ばれるものに類似している。しかし、Pythonではタプル型は辞書のキーとして使うことができるが、リスト型は内容が変わるため辞書のキーとして使うことはできないという理由から、これら2つの型を区別している。
多くのオブジェクト指向プログラミング言語と同様、Pythonではユーザが新しく自分の型を定義することも可能である。この場合、組み込み型を含む既存の型を継承して新たな型(クラス)を定義する事も、ゼロから全く新しい型を作り出す事も出来る。
Pythonは基本的にメソッドや関数の引数に型を指定する必要がない。そのため、ダック・タイピング という、内部で必要とする演算子やメソッドに対応していれば、関数やオブジェクトの設計時点で意図していなかったオブジェクトを引き渡すことも可能である。
Pythonは型ヒントの構文を用意している[ 12] 。これはプログラマ向けの注釈および外部ツールによる静的型チェックに用いられる。
例として、文字列型の値を受け取って文字列型の値を返す関数は次のようにアノテーションできる。
def greeting ( name : str ) -> str : return f "Hello { name } " TypedDict 型 は特定のキーとバリュー型をもった辞書オブジェクトを表現する型である[ 13] 。
TypedDict 型の定義にはクラス継承構文が用いられるが、この型を持つオブジェクトはランタイムにおいて純粋なdict インスタンスになる。つまり型ヒント専用の型であり、ランタイム型とは区別される[ 14] 。
Pythonはガベージコレクション を内蔵しており、参照されなくなったオブジェクトは自動的にメモリから破棄される。CPython では、ガベージコレクションの方式として参照カウント 方式とマーク・アンド・スイープ 方式を併用している。マーク・アンド・スイープ方式のみに頼っている言語では、オブジェクトがいつ回収されるか保証されないので、ファイルのクローズなどをデストラクタ に任せることができない。CPythonは参照カウント方式を併用することで、循環参照が発生しない限り、オブジェクトはスコープアウトした時点で必ずデストラクトされることを保証している。なおJythonおよびIronPythonではマーク・アンド・スイープ方式を採用しているため、スコープアウトした時点で必ずデストラクトされることが前提のコードだとJythonやIronPythonでは正しく動かない。
イテレータ を実装するためのジェネレータが言語仕様に組み込まれており、Pythonでは多くの場面でイテレータ を使うように設計されている。イテレータの使用はPython全体に普及していて、プログラミングスタイルの統一性をもたらしている。
Pythonでは扱えるデータの全てがオブジェクトである。単純な数値といった基本的なデータ型をはじめ、組み込みのコンテナ型、組み込み関数など、これらは全て統一的な継承関係をもつオブジェクトであり「型」をもっている。これらの組み込み型とユーザ定義型は区別されず、組み込み型を継承したクラスを定義できる。上の「データ型」の項で述べたように Pythonは静的な型チェックを持たないため、Javaのようなインターフェイスという言語上の仕組みは必要とされない。
クラスの継承 (inheritance ) メカニズムでは、複数の基底クラスを持つことができ(多重継承)、導出されたクラスでは基底クラスの任意のメソッドをオーバライド(override ; 上書き)することが可能である。
また、オブジェクトには任意のデータを入れることができる。これらのメソッドやデータは、基本的に、すべてpublicであり、virtual(仮想)である。ただし、先頭にアンダースコアをもつメンバをprivateとすることができる。これは単なるマナーであるが、アンダースコアを2つもつ場合は、クラスの外部からメンバの名前を隠された状態(mangle ; 難号化)とすることでカプセル化 を実現できる。また、利用者定義演算子 が機能として用意されておりほとんどの組み込み演算子(算術演算子(arithmetic operator )や添字表記)はクラスインスタンスで使うために再定義することが可能となっている。
Pythonには「電池付属 ("Battery Included" )」という思想があり、プログラマがすぐに使えるようなライブラリや統合環境をあらかじめディストリビューションに含めるようにしている[ 7] 。
サードパーティ によるライブラリも豊富に存在する(参考:Python#エコシステム )。
Pythonは様々な組み込み型(built-in types)をサポートする。
Mapping型はハッシュ可能な値を任意のオブジェクトへ対応付ける型である[ 15] 。対応する具象クラスはdict である。抽象基底クラスにcollections.abc.Mapping があり、抽象メソッドとして__getitem__,__iter__,__len__ が定義されている。__getitem__ をもったcollectionとも言える。
最初のPythonでは1バイト単位での文字列 型のみ扱い、ひらがな・(全角) カタカナ および漢字のようなマルチバイト文字 はサポートしていなかったが、その後のPython 2.0からはUnicode 文字型が新たに導入された[ † 5] 。
Python 3.0では、Python 2.xにおける文字列型がバイト列型に、またUnicode文字列型が文字列型に変更された。これにより、文字列をPython 3.0で扱う際には後述の変換処理を必ず行う必要がある。ファイル入出力などでエンコードを明示しなければ、標準エンコードを用いて暗黙に行われる場合も多い。これにより多言語の扱いを一貫したものにしている。
Pythonでは文字のエンコード とUnicodeの内部表現を明確に区別している。Unicode文字はメモリ中に保持される抽象的なオブジェクトであり、画面表示やファイルへの入出力の際には変換ルーチン(コーデック )を介して特定のエンコーディングのバイト列表現との間で相互に変換する。また、ソースコード中の文字コードを認識する機能があり、これによって異なる文字コードで書かれたプログラムの動きが異なるリスクを解消している。
Pythonでは変換ルーチンをモジュールとして追加することで、さまざまなエンコーディングに対応できるようになっている。日本語の文字コード(EUC-JP, Shift_JIS, MS932, ISO-2022-JP)に対応したコーデックも作成されている。Python 2.4からは、日中韓国語用のコーデックが標準でディストリビューションに含まれるようになったため[ † 6] 、現在では日本語の処理に関する問題はほとんどなくなった。ただしGUIライブラリであるTkinter や統合開発環境 のIDLE は、プラットフォームにもよるが、まだきちんと日本語に対応していないものもある。
ソースコードの文字コードには、ASCIIと互換性があり、Pythonが対応しているものを使用する。ソースコードのデフォルトエンコーディングは、Python 3.xではUTF-8[ † 7] (ソースコード以外のPython 3のデフォルトエンコーディングは複雑になっている[ † 8] [ † 9] )、Python 2.xではASCIIであるが、デフォルトエンコーディング以外の文字コードを使う場合は、ソースファイルの1行目か2行目に一定の書式でコメントとして記述することになっており[ † 10] 、しばしば以下のようにEmacs やVim などのテキストエディタにも認識可能な書式で記述される(次の例は Emacs が認識できる書式)。
#!/usr/bin/env python3 # -*- coding: utf-8 -*- s = '日本語の文字列' Pythonはインタプリタ 型言語であり(ほとんどの場合)プログラムの実行に際して実行環境(ランタイム )を必要とする。以下はランタイム(実装)およびそれらが実装されているプラットフォームの一覧である。
Pythonの最初のバージョンはAmoeba 上で開発された。のちに多くの計算機環境上で動作するようになった。
Pythonには複数の実装(ランタイム又はコンパイラ)が存在する。
最新の Python 仕様には追従していないが開発が続けられているランタイム・コンパイラとしては以下が挙げられる。
開発が停止・終了したランタイム・コンパイラ[ 編集 ] Pythonはパッケージ管理ソフト・ライブラリ・レポジトリなどからなるエコシステムを形成している。
ビルドシステム/wheel/インストーラ Pythonのパッケージ管理はpip ・pipenv・poetry・rye・uv・EasyInstall などのパッケージ管理システム によっておこなわれる。バイナリパッケージのフォーマット にはwheel があり、これをインタフェース としてビルドシステムとパッケージ管理システムの分離が可能になっている[ † 11] 。
Python Package Index (PyPI)と呼ぶ公式のパッケージリポジトリが存在する。
パッケージ管理および実行環境管理を含めた統合開発環境としてはAnaconda が存在する。
Pythonは多様なコミュニティライブラリによって支えられている。
Pythonは全世界で使われているが、欧米の企業でもよく使われている。大企業ではマイクロソフト やApple などのパッケージソフトウェア企業をはじめ、Google 、Yahoo! 、YouTube などの企業も利用している[ † 12] 。また携帯電話メーカーのノキア では、S60シリーズでPythonアプリケーションが動く[ 24] 。研究機関では、NASA [ † 12] や日本の高エネルギー加速器研究機構 [ 25] でPythonが使われている。
適応範囲はデータサイエンス 、Webプログラミング 、GUI ベースのアプリケーション、CAD 、3Dモデリング 、数式処理 など幅広い分野に及ぶ。
NumPy 、SciPy などの高速な数値計算ライブラリの存在により、データサイエンスや科学技術コンピューティングにもよく用いられる。NumPy、SciPyの内部はC言語で書かれているので、動的スクリプト言語の欠点の一つである動作速度の遅さを補っている[ 26] 。Numba やJAX を使うと、Python のコードがLLVM にJITコンパイル して利用可能であり、非常に高速な計算ができる。TensorFlow などのライブラリによりGPU 上で高速に計算するライブラリも充実している。
JetBrains とPythonソフトウェア財団による共同調査によると、2017年10月現在、Pythonの最も主要な用途は何かというアンケートの結果によると、27%がデータサイエンス(そのうち18%がデータ解析、9%が機械学習 )である[ 27] 。
Django やFlask といったWebアプリケーションフレームワーク が充実しているため、Webアプリケーション開発用途にも多く使われている。JetBrains とPythonソフトウェア財団による共同調査によると、2017年10月現在、26%の人が最も主要な用途としてWeb開発を選んだ[ 27] 。
kivy :オープンソースで商用利用も可能なので、スマホアプリの販売が可能。androidアプリもiOSアプリも作成することが可能Tkinter :pythonの標準ライブラリで簡単にGUIアプリを作成可能。ネットでの情報が最も多いPyQt :クロスプラットフォームで作成可能だが、商用利用は有償xPython :クロスプラットフォームで動作可能なGUIアプリを作成可能スクリプト言語 としての特性から、従来Perl やシェルスクリプト が用いられることの多かったシステム管理用のスクリプトとして複数のOS で採用されている。また、異なる言語で書かれた多数のモジュールの機能を貼り合わせるグルー言語 (糊の言語)として利用する例も多い。実際、多くの商用アプリケーション でPythonは組み込みのスクリプト言語として採用されている。
JetBrainsとPythonソフトウェア財団による共同調査によると、2017年10月現在、9%の人が最も主要な用途としてDevOps 、システム管理、自動化スクリプトを上げた[ 27] 。
Pythonは本来は教育用を目的として設計されたわけではないが[ 28] 、その単純さから子供が最初に学ぶプログラミングにおける教育用の言語としての利用が増えている。グイド・ヴァンロッサム はPython設計以前に教育用言語であるABC の開発にかかわり、教育用としての利用について期待感を示したこともあり、方針として非技術者向けといった利用を視野に入れているとされることもある[ 29] 。
私の大好きなPython利用法は、騒ぎ立てずに、言語教育でプログラミングの原理を教えること。それを考えてくれ――次の世代の話だね。--スラド『 Guido van Rossum へのインタビュー』
情報処理推進機構 (IPA)は国家試験 の基本情報技術者試験 では2020年の春期試験からCOBOL を廃止してPythonを追加した[ 30] 。
日本の高等学校情報科 「情報Ⅰ」の教員向け研修教材の中で、プログラミング用言語としてPythonが使われている[ 31] 。
ただし、Pythonの言語は言語自身に組み込まれている型とそれに付随するメソッドの多いことなどから、C言語に較べると遙かに多くの憶えなければならない事柄があることになる。持つ機能の一部だけに限定して教育に用いるならば、憶えなければならない事柄を減らすことができる。しかし言語の機能をすべて知っていないと他人の書いたプログラムを正しく理解することが出来ない可能性が生じる。Python言語の変数自身には型が無いことから、プログラム上で扱われているデータ・オブジェクトの型が何であるかは実行時に動的に決まるので、それを読み解いて把握しなければプログラムが行っている処理の内容を正しく把握することが難しいことがしばしばある(正しい注釈を付けてプログラムを書くことが重要である)。
また、Pythonの文法は僅か1行でも処理を記述できるほどに簡潔なので、まだプログラミングについてよく知らない子供でも取り組みやすい言語であると言える。[ 32]
# Pythonで記述した「Hello,World!」の例 # Pythonはたった一行のコードで文字を表示することができる。 print ( "Hello, World!" ) // Javaで記述した「Hello, World!」の例 // Javaでは文字の表示に最低5行コードを記述する必要がある class Main { public static void main ( String ... args ) { System . out . println ( "Hello, World!" ); } } Pythonはその文法の簡潔さにより、 誰が書いても似たようなコードになりやすい性質があるので、学習が進むにつれて大人が作成したコードを理解できるようになる。[ 32]
また、文法が簡潔なのでコードを記述している最中に混乱することが少なくなり、子供が途中で諦めてしまう傾向が少ない点も教育用として利用される理由でもある。[ 32]
この節で示されている出典について、該当する記述が
具体的にその文献の何ページあるいはどの章節にあるのか、特定が求められています 。
ご存知の方は加筆 をお願いします。(2024年9月 )
Pythonはプロスポーツの分析によく使われている。メジャーリーグベースボール (野球)、イングリッシュプレミアリーグ (サッカー)、ナショナルバスケットボールアソシエーション (バスケットボール)、ナショナルホッケーリーグ (アイスホッケー)、インディアンプレミアリーグ (クリケット)の実際のデータセットからのスポーツ分析は、ベストセラーの本 と映画 であるマネーボール によって示される現実世界の成功によって部分的に推進され、人気が高まっている研究分野として浮上している(セイバーメトリクス )。チームとプレーヤーのパフォーマンスデータの分析は、フィールド、コート、氷上だけでなく、ファンタジースポーツプレーヤーやオンラインスポーツギャンブルのリビングルームでもスポーツ業界に革命をもたらし続けている。実際のスポーツデータを使用した予測スポーツ分析の原則を使用して、プレーヤーとチームのパフォーマンスを予測する[ 33] 。
Pythonを使ってデータをプログラミングする方法を示したり、マネーボールのストーリーの背景にある主張を検証したり、マネーボールの統計の進化を調べたりすることが可能である。公開されているデータセットから野球のパフォーマンス統計を計算するプロセスを案内される。実行期待値マトリックスを使用して導出された、より高度な測定値(Wins Above Replacement(WAR )など)に進む。これらの統計を使用して、独自のチームおよびプレーヤーの分析を行うことができるようになる[ 34] [ 35] 。
Pythonを使用してプロスポーツの試合結果の予測を生成する方法の主な重点は、チームの支出に関するデータを使用して、ゲームの結果をモデル化する方法としてロジスティック回帰 の方法を教えることである。過去の結果をモデル化し、そのモデルを使用して、まだプレイされていない結果のゲームを予測するプロセスを実行する。ベッティングオッズのデータを使用してモデルの信頼性を評価する方法をオーナーに示す。分析は最初に英国プレミアリーグに適用され、次にNBAとNHLに適用される。データ分析とギャンブルの関係、その歴史、および個人的なリスクを含むスポーツベッティングに関連して発生する社会的問題の概要も説明する。マネーボールは、データ分析を使用してチームの勝率を高めることができることを示すことにより、プロスポーツのパフォーマンス統計の分析に革命を引き起こした [独自研究? ] [ 34] [ 35] 。
Pythonを使用してデータをプログラムし、マネーボールのストーリーの背後にある主張をテストし、マネーボール統計の進化を調べる方法を示し、公開されているデータセットから野球のパフォーマンス統計を計算するプロセスができる[ 34] [ 35] 。スポーツ分析には、トレーニングと競技の両方の取り組みを定量化するアスリートとチームからの大量のPythonデータセットが含まれるようになった。ウェアラブルテクノロジーデバイスは、アスリートが毎日着用しており、シーズン全体にわたるアスリートのストレスと回復を詳細に調べるためのかなりの機会を提供する。これらの大規模なデータセットのキャプチャは、怪我の予防に関する新しい仮説と戦略、およびトレーニングと回復を最適化するためのアスリートへの詳細なフィードバックにつながった。Pythonでのプログラミングを使用して、トレーニング、回復、パフォーマンスに関連する概念を調査することもできる[ 36] 。
PythonScikit-learn (sklearn)ツールキットと実際の運動データを使用して教師あり機械学習手法を探索し、機械学習アルゴリズムと運動結果の予測方法の両方を理解する。サポートベクターマシン (SVM)、決定木 、ランダムフォレスト 、線形回帰 およびロジスティック回帰、アンサンブル などの方法を適用して、NHLやMLBなどのプロスポーツリーグからのデータを調べる。また、Apple Watch や慣性測定ユニット (IMU)などのウェアラブルデバイスも含まれる。分類と回帰の手法を使用して、運動活動やイベント全体であるスポーツ分析を可能にする方法を幅広く理解できるようになる。スポーツコンテストのカテゴリ別結果変数(つまり、勝ち、引き分け、負け)を処理する際の回帰モデル、線形確率モデル(LPM)を、その理論的基礎、計算アプリケーション、および経験的制限の観点からモジュールは、カテゴリ従属変数のLPMのより良い代替として、ロジスティック回帰をし、デモンストレーションする。順序付けられたロジットモデルと公開されている情報を使用してEPLサッカーゲームの結果を予測する方法を示す。ベッティングオッズに対してこれらの予測の正確さを評価し、それらが非常に正確であることを示す。北米の3つのチームスポーツリーグ(NHL、NBA、MLB)のコンテキストでモデルを複製することにより、前週に取り上げたEPL予測モデルの有効性を評価する。具体的には、順序付けられたロジットモデルと公開されている情報を使用して、NHL、NBA、MLBのレギュラーシーズンゲームの結果を予測する[ 37] 。
元々はAmoeba の使用言語であるABC言語 に例外処理 やオブジェクト指向 を対応させるために作られた言語である[ 38] 。正確には、AmoebaへABC言語を実装する研究をしていたヴァンロッサムが、クリスマス休暇の間にC言語を元にして生まれたインタープリターから始まる[ 39] 。
1991年 にヴァンロッサムがPython 0.90のソースコード を公開した。この時点ですでにオブジェクト指向言語の特徴である継承 、クラス 、例外処理 、メソッド やさらに抽象データ型 である文字列 、リスト の概念を利用している。これはModula-3 のモジュール を参考にしていた。
1994年 1月、Python 1.0を公開した。主な特徴として関数型言語 の基本であるラムダ計算 を実装、map関数・reduce関数などを組み込んだ。
バージョン1.4からはCommon Lisp にある機能とよく似たキーワード引数 を導入した。また簡易ながら名前修飾 を用いたカプセル化 も実装した。
2000年 に公開。ガベージコレクション やUnicode 、リスト を導入した。一躍メジャーな言語となった。多くの機能はHaskell を参考にして導入している。
バージョン2.4には、子プロセスの起動やコマンドを実行できるsubprocessモジュールが実装された。[ 40]
2.6以降のバージョンには、2.xから3.xへの移植を助ける「2to3 ツール」と「lib2to3 モジュール」を含んでいる[ † 13] 。2.7が2.xの最後のバージョンで、2.7のサポートは2020年 1月1日 までである[ † 14] 。ただし、サポート終了後に 2.7.18 を2020年4月にリリースし、これが最後の 2.7.x になる[ 41] [ 42] 。これ以上のセキュリティパッチやその他の改善はリリースされない[ † 15] 。
バージョン リリース日[ 43] サポート期限[ 44] 2.0 2000年10月16日 2.1 2001年4月15日 2.2 2001年12月21日 2.3 2003年7月29日 2.4 2004年11月30日 2.5 2006年9月19日 2.6 2008年10月1日 2013年10月29日 2.7 2010年7月4日 2020年1月1日
2008年 、長い試験期間を経てPython 3.0が公開された。開発初期には、西暦3000年に公開予定の理想のPythonとして、Python 3000と呼んでいた。Py3Kと略すこともある。
しかし2.xとの後方互換性が損なわれている。当初は2.xに比べて3.xが利用できるライブラリ等が著しく少ないという問題点があったが、Django など徐々に3.xに対応したフレームワークやライブラリなどが増えていったこともあり、2016年 時点においては新規のプロジェクトについて3.xで開発することが多くなっている[ 45] [信頼性要検証 ] 。JetBrains とPythonソフトウェア財団による共同調査では、Python の 2 と 3 がどっちがメインであるかというアンケートで、Python 3 がメインであると答えた人が、2016年1月は40%だったが、2017年10月は75%になった[ 27] [ 46] 。
2015年 11月にリリースされたFedora 23 [ 47] や2016年4月にリリースされたUbuntu 16.04 LTS [ 48] では、デフォルトでインストールされるPythonのバージョンが2.xから3.xに変更されている。Red Hat Enterprise Linux では8をもってPython 2が廃止となった[ 49] [ 50] 。
バージョン リリース日[ 43] サポート期限[ 44] 3.0 2008年12月3日 2009年1月13日 3.1 2009年6月27日 2012年4月9日 3.2 2011年2月20日 2016年2月20日 3.3 2012年9月29日 2017年9月29日 3.4 2014年3月16日 2019年3月18日 3.5 2015年9月13日 2020年9月30日 3.6 2016年12月23日 2021年12月 3.7 2018年6月27日 2023年6月 3.8 2019年10月14日 2024年10月 3.9 2020年10月5日 2025年10月 3.10 2021年10月4日 2026年10月 3.11 2022年10月24日 2027年10月 3.12 2023年10月2日 2028年10月
3.0 [ 51]
print命令をprint関数へ変更 Unicodeを全面採用 整数をint型に一本化 3.1 [ 52] [ 53]
順序付き辞書 単体テストフレームワーク「unittest」への機能追加 TkinterでのTile対応 import文のリファレンス実装となる、Pythonで実装したimportlibモジュール ネストしたwith文に対する新たな文法 3.2 [ 54]
単体テストモジュールのアップデートや拡張モジュール向け stable ABI pyc レポジトリディレクトリのサポート E-mail パッケージや SSL モジュールの改善 pdb (Python debugger) の改良 3.3 3.1リリースから2年間、言語仕様を凍結し変更を行わない「モラトリアム期間」を解除した[ 55] 。 新しい文法として、ジェネレータ関数内で別のジェネレータ関数を利用する「yield from」を追加。 「u」や「U」といったプレフィックスを用いたUnicodeリテラルシンタックスを復活 UCS-4文字列にも対応し、文字列表現の柔軟性を強化 仮想化Python実行環境を導入するためのvirtualenvパッケージの機能を「venv」機能としてコアに取り込んだ。 3.4[ 56] [ 57] オブジェクト指向ファイルシステムパスを提供する「pathlib」モジュールの提供 列挙型を扱うためのenumモジュールの標準化 統計関数を提供するstatisticsモジュールの導入 Pythonが割り当てたメモリブロックを追跡するためのデバッグツールのtracemallocモジュールの導入 非同期I/Oを扱うためのフレームワークとなるasyncioモジュールの導入 Pythonの組み込み関数に関する分析情報を得るため機構の実装 3.5[ 58] [ 59] zipアプリケーションサポートの改良 byte/bytearrayオブジェクトのための「%」フォーマット対応の追加 行列乗算演算子@の導入 高速ディレクトリトラバーサル機能os.scandir()の導入 割込がかかったシステムコールのオートリトライ機能追加 近似値であるかどうかをテストする機能の導入 .pyoファイルの削除 拡張モジュールをロードするための新しい仕組みの導入 3.6[ 60] 文字列中に式を埋め込める「Formatted string literals」の導入 変数に対して型に関する情報(型ヒント)を与える「Syntax for variable annotations」の導入 「async」および「await」文法 (async/await )でコルーチンを利用可能にする「Asynchronous generators」の導入 標準ライブラリにsecretsモジュールを追加 DTraceおよびSystemTapプローブのサポートを追加 3.7[ 61] [ † 16] 使用時点では宣言されていない型を使った型アノテーション表記が可能となる レガシーな C ロケールの抑圧、強制 UTF-8 実行モード breakpoint() 関数の追加 dict の挿入順の保存 ナノ秒 (10-9 s) 単位の分解能を持つ新しい時間関数の追加コンテキスト変数 データクラス 3.8[ † 17] 代入式 := 位置のみのパラメータ f文字列で f'{expr=}' の形式のサポート pickle プロトコル5 dict での reversed のサポート 3.9[ 62] 辞書のマージ演算子 removeprefix(),removesuffix()メソッド追加 組み込みGeneric型 zoneinfoモジュール 3.10[ 63] 構造的パターンマッチング デバッガなどでより正確な行番号を表示 型ヒントユニオン型を X | Y と書けるようになった : TypeAlias を付与した明示的な型エイリアス引数仕様変数 zip関数の追加パラメータ 3.11[ 64] 3.12[ 65] PythonはPSF (Python Software Foundationライセンス) の下、オープンソース で配布されている。このライセンスの内容はGPL に類似したものであるが、変更したバージョンを配布する際に変更をオープンソースにしなくてもよい、という点がGPLとは異なっている。
^ “Python Release Python 3.14.0 ”. Python.org (2025年10月7日). 2025年10月8日閲覧。 ^ Chapter 3. The Nature of JavaScript - Speaking JavaScript、2019年4月19日閲覧^ Bini, Ola (2007). Practical JRuby on Rails Web 2.0 Projects: bringing Ruby on Rails to the Java platform . Berkeley: APress. p. 3. ISBN 978-1-59059-881-8 ^ “What is Python? Executive Summary ” (英語). Python.org . 2026年1月4日閲覧。 ^ “History and License ” (英語). Python documentation . 2026年1月4日閲覧。 ^ “一般 Python FAQ ”. Python documentation . 2026年1月4日閲覧。 ^a b “10. 標準ライブラリミニツアー ”. Python documentation . 2026年1月4日閲覧。 ^ TIMTOWTDI。there's more than one way to do it ^ “一発で素人だとばれるPythonコード、「a=1」のどこがまずいのか ”. 日経クロステック. 2025年5月10日閲覧。 ^ “PEP 8 ”. Python. 2025年2月13日閲覧。 ^a b “Design and History FAQ — Python 3.9.6 documentation ”. docs.python.org . 2021年8月26日閲覧。 ^ typing --- 型ヒントのサポート — Python 3.10.0b2 ドキュメント ^ A TypedDict type represents dictionary objects with a specific set of string keys, and with specific value types for each valid key. “Typed dictionaries ”. Python Software Foundation. 2025年6月11日閲覧。 ^ The created TypedDict type object is not a real class object. Here are the only uses of the type a type checker is expected ... When called, the TypedDict type object returns an ordinary dictionary object at runtime “Typed dictionaries ”. Python Software Foundation. 2025年6月11日閲覧。 ^ "A mapping object maps hashable values to arbitrary objects."The Python Standard Library - Python ver3.11.2 . 2023-03-01閲覧. ^ exaloop/Codon ^ "Python-based compiler achieves orders-of-magnitude speedups", MIT News, (March 14, 2023). ^ "MIT Turbocharges Python’s Notoriously Slow Compiler > Codon lets users run Python code as efficiently as C or C++", IEEE Spectrum (2023年3月30日掲載記事) ^ T. G. Mattson, T. A. Anderson and G. Georgakoudis, "PyOMP: Multithreaded Parallel Programming in Python," in Computing in Science & Engineering, vol. 23, no. 6, pp. 77-80, 1 Nov.-Dec. 2021, doi: 10.1109/MCSE.2021.3128806. ^ PyOMP: Parallel multithreading that is fast AND Pythonic. Presented by Tim Mattson (Intel) ^ Jython ... Only version 2.7 of Python can be supported at present “jython ”. jython. 2025年6月11日閲覧。 ^ Stackless Python. Development of this project has now stopped, and the project is archived. “stackless ”. stackless-dev. 2025年6月11日閲覧。 ^ 12 March 2012 Psyco is unmaintained and dead. “psyco ”. 2025年6月11日閲覧。 ^ “Python for S60 ”. 2006年4月28日時点のオリジナル よりアーカイブ。2007年1月17日閲覧。 ^ “KEKB: An Asymmetric Electron-Positron Collider for B-Factory in KEK ”. 2008年3月4日時点のオリジナル よりアーカイブ。2007年1月17日閲覧。 ^ “Python for Scientists and Engineers ”. 2015年8月9日閲覧。 ^a b c d Python Developers Survey 2017 - Results ^ TSpython 発言 ^ “EDU-SIG: Python in Education ”. 2011年5月16日閲覧。 ^ プレス発表 基本情報技術者試験における出題を見直し:IPA 独立行政法人 情報処理推進機構 ^ 文部科学省 初等中等教育局情報教育・外国語教育課高等学校情報科「情報Ⅰ」教員研修用教材(本編) 「第3章 コンピューターとプログラミング 」(2019年5月)^a b c “Pythonとは?主な特徴や子どもに習得させるメリットを知っておこう ”. www.hallo.jp . 2023年6月2日閲覧。 ^ “Foundations of Sports Analytics: Data, Representation, and Models in Sports ”. Coursera . 2022年2月2日閲覧。 ^a b c “Moneyball and Beyond ”. Coursera . 2022年2月2日閲覧。 ^a b c “Prediction Models with Sports Data ”. Coursera . 2022年2月2日閲覧。 ^ “Wearable Technologies and Sports Analytics ”. Coursera . 2022年2月2日閲覧。 ^ “Introduction to Machine Learning in Sports Analytics ”. Coursera . 2022年2月2日閲覧。 ^ “Why was Python created in the first place? ”. General Python FAQ . Python Software Foundation. 2007年3月22日閲覧。 ^ “Pythonの歴史について起源から分かりやすく解説 ”. テクフリ . 2025年11月21日閲覧。 ^ https://www.fenet.jp/dotnet/column/language/7841/ 「Pythonのsubprocessモジュールの使い方|子プロセスの起動方法からわかりやすく解説」.NET Column (2021年3月25日) 2023年5月17日閲覧。^ "Python 2.7.18はPython 2.7の最後のリリースであり、したがってPython 2の最後のリリースである " ^ Peterson, Benjamin (2020年4月20日). “Python Insider: Python 2.7.18, the last release of Python 2 ”. Python Insider . 2020年4月27日閲覧。 ^a b “Python Documentation by Version ”. Python Software Foundation. 2014年3月20日閲覧。 ^a b 17. Development Cycle — Python Developer's Guide ^ 佐野裕史. “【入門者必見】Python2と3、どっちを学習すべき?違いを徹底解説! ”. 株式会社 侍. 2016年9月21日閲覧。 ^ By the numbers: Python community trends in 2017/2018 | Opensource.com ^ “【Changes/Python 3 as Default ”. Fedora Project . 2013年10月24日時点のオリジナル よりアーカイブ。2016年9月21日閲覧。 ^ kuromabo. “Ja ”. Ubuntu.com. 2016年9月21日閲覧。 ^ Red Hat Enterprise Linux 7 Chapter 53. Deprecated Functionality - Red Hat Customer Portal ^ “RHEL8/9系ディストリビューションでPython 3を使う ”. Qiita (2024年6月10日). 2025年1月16日閲覧。 ^ “登場! Python 3.0 - 2系との違いを比較 ”. マイナビ (2009年1月1日). 2014年3月13日閲覧。 ^ “「Python 3.1」正式版リリース ”. OSDN Corporation (2009年7月1日). 2009年7月3日時点のオリジナル よりアーカイブ。2014年3月13日閲覧。 ^ “Python 3.1リリース ”. OSDN Corporation (2009年6月30日). 2011年11月8日時点のオリジナル よりアーカイブ。2014年3月13日閲覧。 ^ “Python 3.2リリース ”. OSDN Corporation (2011年2月22日). 2011年11月7日時点のオリジナル よりアーカイブ。2014年3月13日閲覧。 ^ 末岡洋子 (2012年10月1日). “仕様変更凍結が解除され新機能が追加された「Python 3.3」、ついにリリース ”. SourceForge.JP . 2012年10月2日時点のオリジナル よりアーカイブ。2014年3月13日閲覧。 ^ 後藤大地 (2014年3月18日). “Python 3.4登場 ”. マイナビニュース . 2014年3月20日閲覧。 ^ 末岡洋子 (2014年3月18日). “「Python 3.4」リリース、標準ライブラリを強化 ”. SourceForge.JP . 2014年3月19日時点のオリジナル よりアーカイブ。2014年3月20日閲覧。 ^ 後藤大地 (2015年9月13日). “Python 3.5.0登場 ”. マイナビニュース . 2015年11月5日閲覧。 ^ “「Python 3.5」正式版がリリース – 新機能が多数追加 ”. ソフトアンテナブログ (2015年9月14日). 2022年10月2日時点のオリジナル よりアーカイブ。2015年11月5日閲覧。 ^ 末岡洋子 (2016年12月26日). “「Python 3.6」がリリース ”. OSDN . 2016年12月26日時点のオリジナル よりアーカイブ。2017年5月26日閲覧。 ^ “「Python 3.7」リリース ”. Begi.net. 2025年12月26日閲覧。 ^ What's New In Python 3.9 — Python 3.9.12 ドキュメント ^ What's New In Python 3.10 — Python 3.10.4 ドキュメント ^ “What's New In Python 3.11 ”. Python documentation . 2024年4月23日閲覧。 ^ “What's New In Python 3.12 ”. Python documentation . 2024年4月23日閲覧。 ウィキメディア・コモンズには、
Python に関連するカテゴリがあります。
ウィキブックスに
Python 関連の解説書・教科書があります。
実装 実行時コンパイラ ウィジェット・ツールキット フレームワーク 統合開発環境(専用) 総合開発環境(汎用) ライブラリ
低水準言語 高水準言語
1950年代 1960年代 1970年代 1980年代 1990年代 2000年代 2010年代 2020年代
架空の言語