Python
提供: フリー百科事典『ウィキペディア(Wikipedia)』
| Python | |
|---|---|
| パラダイム | マルチパラダイム |
| 登場時期 | 1990年 |
| 設計者 | グイド・ヴァンロッサム |
| 開発者 | パイソンソフトウェア財団 |
| 最新リリース | 3.1.1 / 2009年8月16日 2.6.3 / 2009年10月2日 |
| 型付け | 強い動的型付け |
| 主な処理系 | CPython, Jython, IronPython, PyPy |
| 影響を受けた言語 | ABC, C, Haskell, Icon, Lisp, Modula-3, Perl, Smalltalk, Tcl |
| 影響を与えた言語 | Ruby, Boo, Perl, JavaScript |
| プラットフォーム | クロスプラットフォーム |
| ライセンス | Python Software Foundation License |
| ウェブサイト | http://www.python.org |
Python(パイソン)は、オランダ人のグイド・ヴァンロッサムが作ったオープンソースのプログラミング言語。オブジェクト指向スクリプト言語の一種であり、Perlとともに欧米で広く普及している。イギリスのテレビ局 BBC が製作したコメディ番組『空飛ぶモンティ・パイソン』にちなんで名付けられた。Pythonは英語で爬虫類のニシキヘビの意味で、Python言語のマスコットやアイコンとして使われることがある。
目次 |
[編集] 概要
Pythonは汎用の高水準言語である。プログラマの生産性とコードの信頼性を重視して設計されており、核となるシンタックスおよびセマンティクスは必要最小限に抑えられている反面、利便性の高い大規模な標準ライブラリを備えている。
Unicodeによる文字列操作をサポートしており、日本語処理も標準で可能である。 多くのプラットフォームをサポートしており(動作するプラットフォーム)、また、豊富なドキュメント、豊富なライブラリがあることから、産業界でも利用が増えつつある。
[編集] 特徴
Pythonはインタプリタ上で実行されることを前提に設計されており、以下のような特徴をもっている:
[編集] 利用範囲
Webプログラミング、GUIベースのアプリ ケーション、CAD、3Dモデリング、数式処理等幅広い分野で使用されている。あるいは、スクリプト言語としての特性から、従来Perlやシェルスクリプトが用いられることの多かったシステム管理用のスクリプトとして採用しているOSも複数ある。
また、多くの異なる言語で書かれたモジュールをまとめるグルー言語としての利用例も多い。実際、多くの商用アプリケーションで Python は組み込みのスクリプト言語として採用されている(⇒Pythonを使っている製品あるいはソフトウェアの一覧)。
[編集] 動作するプラットフォーム
Pythonの最初のバージョンはAmoeba上で開発されたが、のちに多くのプラットフォーム上で動作するようになっている。
- Windows, Windows CE(9x系およびNT系は最新版、Windows 3.1およびMS-DOSは旧版のみ)
- Macintosh(OS 9以前およびOS X以降ともに)
- 各種UNIX
- Linux(Linux Standard Base3.2で標準仕様となった)
- PalmOS
- S60
- Javaプラットフォーム (Jython)
- .NET Frameworkプラットフォーム (IronPython)
[編集] 実装
現在のところ、Pythonインタプリタには複数の実装が存在している:
- CPython - オリジナルのCで書かれたバージョン。通常「Python」といえばこのCPythonを指す。
- Stackless Python - PythonインタプリタをCスタックを使わずに独自のスタック(Pythonスタック)で実装したもの。
- Jython - Java仮想マシン上に移植したもの。PythonからJavaのライブラリを使うことができる。
- IronPython - .NET Framework/Monoで動作するPython。C#で実装されている。.NET Frameworkのライブラリを使うことができる。
- PyPy - PythonによるPythonインタプリタの実装
- PyMite - 組み込み向けの実装、AVRなどに対応。
[編集] ライセンス
Python のリリースは全てオープンソースであり、PSF(Python Software Foundationライセンス)として配布されている。これはGPL互換であるが、GPLと異なり、変更したバージョンを配布する際に変更をオープンソースにしなくてもよい。
[編集] 歴史
[編集] Python の歴史
- 1990年代始め - オランダにあるStichting Mathematisch Centrum(CWI)で、グイド・ヴァンロッサムによってPythonの初期バージョンが作成される。これはABCと呼ばれる言語の後継言語として生み出された。
- 1995年 - ヴァンロッサムは米国ヴァージニア州レストンにあるCorporation for National Research Initiatives(CNRI) に移動。ここでPythonの開発に携わり、いくつかのバージョンをリリースする。
- 2000年3月 - ヴァンロッサムとPythonのコア開発チームは BeOpen.com に移り、BeOpen PythonLabs チームを結成する。同年10月、PythonLabsチームはDigital Creations(現在のZope Corporation) に移る。
- 2001年 - Pythonに関する知的財産を保有するための非営利組織Python Software Foundation(PSF) が立ち上がる。このときZope CorporationはPSFの賛助会員となる。
[編集] Pythonに影響を与えた言語
- ABC(インデントによる構文)
- Modula-2, -3(モジュール機能、オブジェクト指向)
- Icon(辞書、スライス演算子など)
- SETL(リストの内包表現)
- C, C++(基本的な構文)
- Smalltalk(仮想マシン機構、動的性)
- Lisp, Scheme(関数型言語の機能)
[編集] 言語の機能
Pythonは言語自身の機能をできるだけ小さくおさえ、ユーザがいつも必要とする最小限の機能のみを提供するように作られている。これはPerlのTIMTOWTDI(there's more than one way to do it - あることをするのにいくつものやり方がある)という哲学とは対照的であり、Pythonでは多くのユーザによって書かれた同一の仕事をするプログラムは、だいたいどれも同じようなコードに収束する。基本機能にないものの多くはライブラリによって提供されている。
また、Pythonではプログラムの文書化(ソフトウェアドキュメンテーション)が重視されており、言語の基本機能の一部となっている。Pythonはもともと教育用に設計されたためか、読みやすく、それでいて効率もよいコードをなるべく簡単に書けるようにするという思想がすみずみまで浸透しており、Pythonコミュニティでもわかりやすいコードをよしとする傾向が強い。
[編集] 文法
Pythonの文法は基本的にCやJavaなどとよく似ているが、Python独自の特徴のひとつにインデントを用いたブロック構造の定義がある。これは通常のCなどにおける中カッコによるブロック構造のかわりに、行頭からの空白(インデント)による「見た目のブロック構造」と「実際の論理的な制御構造」を結びつける手法で、視覚に訴えるコードの使用を強制している。なお、C/C++やJavaでは文末に ;(セミコロン)をつける必要があるが、Pythonでは必要ない。ただしPythonでもセミコロンは文末として機能するため、複数の文をつなげる目的で ;(セミコロン)を使ってもかまわない。しかし、if-else構文などは (Python 2.4までは) 本質的に 1行で書くことは不可能であった。Python2.5で導入された条件付評価式 (Conditional Expressions) のif-elseを使用すれば、1つの式として記述できる。
以下にCとPythonで再帰呼び出しを用いて階乗を計算する例を示す:
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;
このコードは、文法的には正しいが、おそらく書いた本人が意図した動作をせず、しかも、それを見つけるのが困難である。
多くの人は、どのようなコーディングスタイルであれ、インデントのような空白によって明確に整列されたコードを目安としてソースコードを読むのであって、コンパイラのように構文解析しながらソースを読むものではない。その結果、文法は正しく、見た目も一見正しく見えるのに、不具合を作り込んでしまう危険性がある。
Pythonでは、インデントを文法の一部に組み入れることにより、人間が目視するソースコードの理解と、コンパイラの構文解析の間のミスマッチを少なくすることで、より正確に意図したとおりにコーディングすることができるようになっている。
[編集] データ型
Pythonのデータは動的に型付けされる。値自身が型を持っており、変数はすべて値への参照である。
基本的なデータ型として、整数型・多倍長整数型・浮動小数点数型・複素数型・文字列型・Unicode文字列型、そして関数型がある。多倍長整数型は(メモリの許す限り)無制限の桁数で整数計算が可能である。
さらに組み込みのコンテナ型として、リスト型、タプル型、辞書型(連想配列)のほか、値の重複を許さない集合型(Python 2.3以降)がある。
リスト型および辞書型は内部の値をあとから変えられる(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自身のコードの構文解析ツールなどが含まれる。
サードパーティによるライブラリも多い。行列演算パッケージのNumeric Pythonや画像処理のためのPython Imaging Library、SDLのラッパであるPyGameなどはよく知られている。ただし、マイナーなものまで含めると多すぎて収拾がつかなくなったため、Python Cheese Shop と呼ばれるライブラリのリポジトリを管理する機構が導入された。
[編集] 多言語の扱い
Pythonは当初1バイト単位での文字列型のみ扱い、かな漢字のようなマルチバイト文字をサポートしていなかったが、Python 2.0からUnicode文字型が新たに導入された。
Pythonでは文字のバイト列表現(エンコーディング)とUnicodeの内部表現を明確に区別している。Unicode文字はメモリ中に保持される抽象的なオブジェクトであり、画面表示やファイルへの入出力のさいには、変換ルーチン(コーデック)を介して特定のエンコーディングのバイト列表現と相互変換する。また、ソースコード中の文字コードを認識する機能があり、これによって異なる文字コードで書かれたプログラムの動きが異なるという危険を解消している。
Pythonでは変換ルーチンをモジュールとして追加することで、さまざまなエンコーディングに対応できるようになっている。日本語の文字コード (EUC-JP, Shift_JIS, MS932, ISO-2022-JP) に対応したコーデックも作成されている。Python 2.4からは、日中韓国語用のコーデックが標準でディストリビューションに含まれるようになったため、現在では日本語の処理に問題はほとんどなくなった。ただしGUIライブラリであるTkinterや統合開発環境のIDLEは、プラットフォームにもよるが、まだきちんと日本語に対応していないものもある。
UTF-8で記述した日本語を含むCGIプログラムを実行すると、「Internal Server Error 500」が発生することがある。そのときはソース先頭部に、次のようにUTF-8によるコーディングであることを明示する。
#!/usr/bin/python # coding: utf-8 import cgi
[編集] 教育用言語としてのPython
でも、私の大好きなPython利用法は、騒ぎ立てずに、言語教育でプログラミングの原理を教えること。それを考えてくれ――次の世代の話だね。(『スラッシュドット・ジャパンでの Guido van Rossum へのインタビュー』より)
Pythonは教育用言語であるABCより発展したプログラミング言語であり、実際にプログラミング言語教育に使用され、成功を収めている。また方針として、「非技術者」向けといった利用方法を視野に入れながら開発され続けている。
[編集] ユーザ
[編集] Pythonを使っている製品あるいはソフトウェア
Pythonを使っている製品あるいはソフトウェアの一覧を参照のこと。
[編集] Pythonを利用している企業・機関
Pythonはおもに欧米の企業でよく使われている。大企業ではマイクロソフトやアップルなどのパッケージソフトウェア企業をはじめ、Google、Yahoo!、YouTube などの企業も利用している [1]。また携帯電話メーカーのNokiaでは、S60シリーズで Python アプリケーションが動く[2]。研究機関では、NASA[3] や日本の高エネルギー加速器研究機構[4]でPythonが使われている。
- ^ "Quotes about Python". 2007-01-15 閲覧。
- ^ "Python for S60". 2007-01-17 閲覧。
- ^ "Quotes about Python". 2007-01-15 閲覧。
- ^ "KEKB: An Asymmetric Electron-Positron Collider for B-Factory in KEK". 2007-01-17 閲覧。
[編集] 外部リンク
- Python 公式サイト (英語) - ソフトウェアおよびマニュアルのダウンロード。
- 日本Pythonユーザ会 - マニュアルの日本語訳を配布している。
- Python Wiki (英語) - Python関連情報のWiki。
- OrganizationsUsingPython - PythonInfo Wiki (英語) - Pythonを利用している組織の一覧。
- スラッシュドット・ジャパンでの Guido van Rossum へのインタビューの翻訳
- PLEAC-Python
|
|||||||||||||||||||||||||||||