出典(authority):フリー百科事典『ウィキペディア(Wikipedia)』「2015/09/21 00:04:42」(JST)
この項目では、プログラミング言語について説明しています。その他の用法については「パイソン」をご覧ください。 |
パラダイム | マルチパラダイム: オブジェクト指向, 命令形, 関数型, 手続き型, リフレクティブ |
---|---|
登場時期 | 1991年(24年前) (1991) |
設計者 | グイド・ヴァンロッサム |
開発者 | Pythonソフトウェア財団 |
最新リリース | 3.4.3 /2015年2月25日(6か月前) (2015-02-25)[1] 2.7.10 /2015年5月23日(3か月前) (2015-05-23)[2] |
型付け | 強い型付け 動的型付け |
主な処理系 | CPython, PyPy, IronPython, Jython |
方言 | Cython, RPython, Stackless Python |
影響を受けた言語 | ABC[3], ALGOL 68,[4], C[5], C++,[6] Dylan,[7] Haskell,[8] Icon,[9] Java,[10] Lisp,[11] Modula-3,[6] Perl |
影響を与えた言語 | Boo, Cobra, D, F#, Falcon, Go, Groovy, JavaScript[要出典], Ruby[12]Perl[要出典] |
プラットフォーム | クロスプラットフォーム |
ライセンス | Python Software Foundation License |
ウェブサイト | http://www.python.org |
拡張子 | .py, .pyw, .pyc, .pyo, .pyd |
Python Programming - ウィキブックス |
プログラミング言語
■カテゴリ / ■テンプレート
Python(パイソン)は、広く使用されている汎用のプログラミング言語である。コードのリーダビリティが高くなるように言語が設計されていると主張され、その構文のおかげで、Cなどの言語に比べて、より少ないコード行数でプログラムを表現できる[13][14]と主張されている。小規模なプログラムから大規模なプログラムまで、さまざまなプログラムをクリアに書けるように、多くのコードが提供されている[15]。
Pythonは複数のプログラミングパラダイムをサポートしており、オブジェクト指向、命令型、手続き型、関数型などのスタイルでプログラムを書くことができる。Pythonは動的型付け言語であり、参照カウントベースの自動メモリ管理(ガベージコレクタ)を持つ。さまざまな領域をカバーする大規模な標準ライブラリを提供している[16]。
Pythonは、汎用のプログラミング言語として設計されており、標準ライブラリやサードパーティ製のライブラリも充実している。そのためPythonはWebアプリケーションやデスクトップアプリケーションなどの開発はもとより、システム用のスクリプトや、各種の自動処理、理工学や統計解析のためのツールとしてなど、幅広い領域で使用されている。
Pythonのリファレンス実装であるCPythonは、フリーかつオープンソースのソフトウェアであり、コミュニティベースの開発モデルを採用している。CPythonは、非営利団体であるPythonソフトウェア財団が管理している。その他の実装としては、PyPyやIronPythonなどが有名である。
Pythonは、オランダ人のグイド・ヴァンロッサムによって開発された。名前の由来は、イギリスのテレビ局 BBC が製作したコメディ番組『空飛ぶモンティ・パイソン』であるが、Pythonという英単語が意味する爬虫類のニシキヘビがPython言語のマスコットやアイコンとして使われることがある。
Pythonは汎用の高水準言語である。プログラマの生産性とコードの信頼性を重視して設計されており、核となるシンタックスおよびセマンティクスは必要最小限に抑えられている反面、利便性の高い大規模な標準ライブラリを備えている。
多くのプラットフォームをサポートしており(動作するプラットフォーム)、また、豊富なドキュメント、豊富なライブラリがあることから、産業界でも利用が増えつつある。
Pythonはインタプリタ上で実行されることを前提に設計されており、以下のような特徴をもっている:
Pythonの最初のバージョンはAmoeba上で開発されたが、のちに多くのプラットフォーム上で動作するようになっている。
Pythonには複数の実装が存在する。
Python のリリースは全てオープンソースであり、PSF(Python Software Foundationライセンス)として配布されている。これはGPL互換であるが、GPLと異なり、変更したバージョンを配布する際に変更をオープンソースにしなくてもよい。
元々はAmoebaの使用言語であるABC言語に例外処理やオブジェクト指向を対応させるために作られた言語である[3]。
1991年にヴァンロッサムによってPython.0.90のソースコードが公開された。この時点ですでにオブジェクト指向言語の特徴である継承、クラス、例外処理、メソッドやさらに抽象データ型である文字列、リストの概念が導入されている。これはModula-3のモジュールを参考にしていた。
1994年1月、Python1.0がリリースされた。主な特徴として関数型言語の基本であるラムダ計算を実装、map関数、reduce関数などが組み込まれている。
バージョン1.4ではCommon Lispにある機能とよく似たキーワード引数が導入された。また簡易ながら名前修飾を用いたカプセル化も実装された。
2000年に公開。ガベージコレクションやUnicode、リストが導入され一躍メジャーな言語となった。多くの機能はHaskellを参考にして導入している。
2.6以降のバージョンには、2.xから3.xへの移植を助ける「2to3 ツール」と「lib2to3 モジュール」が含まれている[17]。
バージョン | リリース日[18] |
---|---|
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日 |
2.7 | 2010年7月4日 |
2008年、長いテスト期間を経てPython3.0がリリースされた。 開発初期には、西暦3000年にリリース予定の理想のPythonとして、Python 3000と呼ばれていたため、Py3Kと略されることもある。
しかし2.xとの後方互換性が損なわれており、2.xから3.xへの片方向の変換スクリプトが用意されているものの使用者がまだまだ少ないのが現状である[要出典]。
バージョン | リリース日[18] |
---|---|
3.0 | 2008年12月3日 |
3.1 | 2009年6月27日 |
3.2 | 2011年2月20日 |
3.3 | 2012年9月29日 |
3.4 | 2014年3月16日 |
Pythonは言語自身の機能をできるだけ小さくおさえ、ユーザがいつも必要とする最小限の機能のみを提供するように作られている。これはPerlのTIMTOWTDI(there's more than one way to do it - あることをするのにいくつものやり方がある)という哲学とは対照的であり、Pythonでは多くのユーザによって書かれた同一の仕事をするプログラムは、だいたいどれも同じようなコードに収束する。基本機能にないものの多くはライブラリによって提供されている。
また、Pythonではプログラムの文書化(ソフトウェアドキュメンテーション)が重視されており、言語の基本機能の一部となっている。
グイド・ヴァンロッサムはPython設計以前に教育用言語であるABCの開発にかかわっているが、Pythonは教育を目的として設計されたわけではない[26]
Pythonには、読みやすく、それでいて効率もよいコードをなるべく簡単に書けるようにするという思想が浸透しており、Pythonコミュニティでもわかりやすいコードをよしとする傾向が強い[27]。
インデント(「オフサイドルール」)が特徴的である。
以下に、階乗を題材に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ではこのような強制を課すことによって、プログラムのスタイルがその書き手にかかわらずほぼ統一したものになり、その結果読みやすくなるという考え方が取り入れられている。これについては賛否両論があり、批判的立場の人々からは、これはプログラマがスタイルを選ぶ自由を制限するものだ、という意見も出されている。
インデントによる整形は、単に「見かけ」だけではなく品質そのものにも関係する。例として次のコードを示す。
間違えたC:
if (x > 10)
x = 10;
y = 0;
このコードはC言語の構文規則上は問題無いが、インデントによる見かけのifの範囲と、言語仕様によるifの実際の範囲とが異なっているため、プログラマの意図が曖昧になる。この曖昧さは、検知しにくいバグを生む原因になる。
ソースコードを読む際、多くの人はインデントのような空白によって明確に整列されたコードを目安として読み、コンパイラのように構文解析しながらソースを読むものではない。その結果、一見しただけでは原因を見つけられないバグを作成する危険がある。
Pythonでは、インデントをルールとすることにより、人間が目視するソースコードの理解と、コンパイラの構文解析の間の誤差を少なくすることで、より正確に意図した通りにコーディングすることができると主張されている。
Pythonのデータは動的に型付けされる。値自身が型を持っており、変数はすべて値への参照である。
基本的なデータ型として、整数型・多倍長整数型・浮動小数点数型・複素数型・文字列型・Unicode文字列型・論理型、そして関数型がある。多倍長整数型は(メモリの許す限り)無制限の桁数で整数計算が可能である。
さらに組み込みのコンテナ型として、リスト型、タプル型、辞書型(連想配列)のほか、値の重複を許さない集合型(Python 2.3以降)がある。
Python 3.x以降では、整数型が多倍長整数型と統合され、従来の文字列型とUnicode文字列型に代わり、バイト列型と文字列型が導入された。
リスト型および辞書型は内部の値をあとから変えられる(mutable、変更可能)が、タプル型は一度構築したら内部の値は変わらない(immutable、変更不能)。タプル型とリスト型は、多くのプログラミング言語では配列と呼ばれるものに類似している。しかし、Pythonではタプル型は辞書のキーとして使うことができるが、リスト型は内容が変わるため辞書のキーとして使うことはできないという理由から、これら 2つの型を区別している。集合型には変更可能なものと変更不能なものの 2種類がある。
多くのオブジェクト指向プログラミング言語と同様、Pythonではユーザが新しく自分の型を定義することも可能である。この場合、組み込み型を含む既存の型を継承して新たな型(クラス)を定義する事も、ゼロから全く新しい型を作り出す事も出来る。
Pythonは基本的にメソッドや関数の引数に型を指定する必要がないので、内部で必要とする演算子やメソッドに対応していれば、関数やオブジェクトの設計時点で意図していなかったオブジェクトを引き渡すことも可能である(いわゆるダック・タイピングが可能)
Pythonはガベージコレクションを内蔵しており、参照されなくなったオブジェクトは自動的にメモリから破棄される。CPythonでは、ガベージコレクションの方式として参照カウント方式とマーク・アンド・スイープ方式を併用している。マーク・アンド・スイープ方式のみに頼っている言語では、オブジェクトがいつ回収されるか保証されないので、ファイルのクローズなどをデストラクタに任せることができない。CPythonは参照カウント方式を併用することで、循環参照が発生しない限り、オブジェクトはスコープアウトした時点で必ずデストラクトされることを保証している。 JythonおよびIronPythonではマーク・アンド・スイープ方式を採用しているためスコープアウトした時点で必ずデストラクトされることが前提のコードだとJythonやIronPythonでは正しく動かない。
イテレータを実装するためのジェネレータが言語仕様に組み込まれており、Pythonでは多くの場面でイテレータを使うように設計されている。イテレータの使用はPython全体に普及していて、プログラミングスタイルの統一性をもたらしている。
Pythonでは扱えるデータの全てがオブジェクトである。単純な数値といった基本的なデータ型をはじめ、組み込みのコンテナ型、組み込み関数など、これらは全て統一的な継承関係をもつオブジェクトであり「型」をもっている。これらの組み込み型とユーザ定義型は区別されず、組み込み型を継承したクラスを定義できる。上の「データ型」の項で述べたように Pythonは静的な型チェックを持たないため、Javaのようなインターフェイスという言語上の仕組みは必要とされない。
クラスの継承 (inheritance) メカニズムでは、複数の基底クラスを持つことができ(多重継承)、導出されたクラスでは基底クラスの任意のメソッドをオーバライド(override、上書き)することが可能である。
また、オブジェクトには任意のデータを入れることができる。これらのメソッドやデータは、基本的に、すべてpublic
であり、virtual
(仮想)である。ただし、先頭にアンダースコアをもつメンバをprivate
とすることができる。これは単なるマナーであるが、アンダースコアを2つもつ場合は、クラスの外部からメンバの名前を隠された状態(難号化(mangle))とすることでカプセル化を実現できる。また、ほとんどの組み込み演算子(算術演算子(arithmetic operator)や添字表記)はクラスインスタンスで使うために再定義することが可能となっている。
Pythonには「電池が付属しています("Battery Included")」の思想があり、プログラマがすぐに使えるようなライブラリや統合環境をあらかじめディストリビューションに含めるようにしている。このため標準ライブラリは非常に充実しており、これには、正規表現、OSのシステムコール、XML処理系、シリアライゼーション、HTTP、FTP等の各種通信プロトコル、電子メールやCSVファイルの処理、データベース接続 (SQLiteを標準で扱える)、GUIフレームワーク (Tkinter)、そしてHTMLやPython自身のコードの構文解析ツールなどが含まれる。
サードパーティによるライブラリも豊富に存在する。行列演算パッケージのNumPy、画像処理のためのPython Imaging Library、SDLのラッパであるPygameなどがよく知られている。マイナーなものまで含めると多すぎて収拾がつかなくなったため、Python Package Index (PyPI) と呼ばれる公式のパッケージリポジトリが導入された。
Pythonは当初1バイト単位での文字列型のみ扱い、かな漢字のようなマルチバイト文字をサポートしていなかったが、Python 2.0からUnicode文字型が新たに導入された[28]。
Python 3.0では、文字列型がバイト列型に、Unicode文字列型が文字列型に変更された。 従来は文字列の表現方法として2通り(旧文字列型と旧Unicode文字列型)があったが、これを1通り(新文字列型=旧Unicode型)に統一し、旧文字列型は単なるバイト列型として再定義された。 これにより、Python 3.0では、文字列を扱う際には後述の変換処理を必ず行う必要がある。 ファイル入出力など、エンコードを明示しなければ標準エンコードを用いて暗黙に行われる場合も多い。 これにより、多言語の扱いを一貫したものにしている。
Pythonでは文字のバイト列表現(エンコーディング)とUnicodeの内部表現を明確に区別している。Unicode文字はメモリ中に保持される抽象的なオブジェクトであり、画面表示やファイルへの入出力のさいには、変換ルーチン(コーデック)を介して特定のエンコーディングのバイト列表現と相互変換する。また、ソースコード中の文字コードを認識する機能があり、これによって異なる文字コードで書かれたプログラムの動きが異なるという危険を解消している。
Pythonでは変換ルーチンをモジュールとして追加することで、さまざまなエンコーディングに対応できるようになっている。日本語の文字コード (EUC-JP, Shift_JIS, MS932, ISO-2022-JP) に対応したコーデックも作成されている。Python 2.4からは、日中韓国語用のコーデックが標準でディストリビューションに含まれるようになったため[29]、現在では日本語の処理に問題はほとんどなくなった。ただしGUIライブラリであるTkinterや統合開発環境のIDLEは、プラットフォームにもよるが、まだきちんと日本語に対応していないものもある。
ソースコードの文字コードは、ASCIIと互換性があり、Pythonが対応しているものを使用する。 デフォルトエンコーディング[30]以外の文字コードを使う場合は、ソースファイルの 1行目か 2行目に一定の書式でコメントとして記述することになっており[31]、しばしば以下のようにEmacsやVimなどのテキストエディタにも認識可能な書式で記述される(次の例は Emacs が認識できる書式)。
#! /usr/bin/python
# -*- coding: utf-8 -*-
s = '日本語の文字列'
Pythonはおもに欧米の企業でよく使われている。大企業ではマイクロソフトやアップルなどのパッケージソフトウェア企業をはじめ、Google、Yahoo!、YouTube などの企業も利用している[32]。また携帯電話メーカーのNokiaでは、S60シリーズで Python アプリケーションが動く[33]。研究機関では、NASA[32]や日本の高エネルギー加速器研究機構[34]でPythonが使われている。
適応範囲はWebプログラミング、GUIベースのアプリケーション、CAD、3Dモデリング、数式処理など幅広い分野に及ぶ。さらにスクリプト言語としての特性から、従来Perlやシェルスクリプトが用いられることの多かったシステム管理用のスクリプトとして採用しているOSも複数ある。また、多くの異なる言語で書かれたモジュールをまとめるグルー言語としての利用例も多い。実際、多くの商用アプリケーションで Python は組み込みのスクリプト言語として採用されている。
またNumPy、SciPyなどの高速な数値計算ライブラリの存在により、科学技術コンピューティングにもよく用いられる。NumPy、SciPyの内部はC言語で書かれている為に動的スクリプト言語の欠点の一つである速度の遅さを補っている。[35]
Pythonは汎用の言語として設計されており、教育を目的として設計されたわけではない[26]が、教育にも使用されている。また方針として非技術者向けといった利用を視野に入れているとされることもあり[36]、作者が教育用として利用されていることについて期待感を示したこともある。
私の大好きなPython利用法は、騒ぎ立てずに、言語教育でプログラミングの原理を教えること。それを考えてくれ――次の世代の話だね。-- スラッシュドット・ジャパン『 Guido van Rossum へのインタビュー』
[ヘルプ] |
ポータル FLOSS |
ウィキメディア・コモンズには、Pythonに関連するカテゴリがあります。 |
ウィキブックスにPython関連の解説書・教科書があります。 |
|
|
Look up Python or python in Wiktionary, the free dictionary. |
A python is a constricting snake belonging to the Python (genus), or, more generally, any snake in the family Pythonidae (containing the Python genus).
This disambiguation page lists articles associated with the title Python. If an internal link led you here, you may wish to change the link to point directly to the intended article. |
全文を閲覧するには購読必要です。 To read the full text you will need to subscribe.
リンク元 | 「パイソン属」「Boa」「Boidae」 |
拡張検索 | 「Python属」 |
.