|
Article on other languages:
|
Python(パイソン)は、オランダ人のグイド・ヴァンロッサムが作ったオープンソースのプログラミング言語。オブジェクト指向スクリプト言語の一種であり、Perlとともに欧米で広く普及している。イギリスのテレビ局 BBC が製作したコメディ番組『空飛ぶモンティ・パイソン』にちなんで名付けられた。Pythonは英語で爬虫類のニシキヘビの意味で、Python言語のマスコットやアイコンとして使われることがある。
概要Pythonは多様な目的に使うことのできる汎用プログラミング言語である。そのカバーする範囲はWebプログラミングから GUIベースのアプリケーションなど、Javaなどと重なっている部分もあるが、一方ではPerlのように日常のちょっとした処理を行わせるのに使うこともできる。スクリプト言語であるがゆえに開発が Java などよりも手軽に行えることや、多くのプラットフォームをサポートしており(動作するプラットフォーム)、豊富なライブラリがあることから、産業界でも利用が増えつつある。豊富なドキュメントをもち、Unicodeによる文字列操作をサポートしており、日本語処理も標準で可能である。ただし、最初からネットワーク利用をメインとして考えられているJavaよりセキュリティについてはやや寛大である。 また、Pythonは純粋なプログラミング言語としてではなく、多くの異なる言語で書かれたモジュールをまとめる(シェルスクリプトのような)グルー言語のひとつとして位置づけることもできる。実際、多くの商用アプリケーションで Python は組み込みのスクリプト言語として採用されている(⇒Pythonを使っている製品あるいはソフトウェアの一覧)。 Pythonは基本的にインタプリタ上で実行されることを念頭において設計されており、以下のような特徴をもっている:
動作するプラットフォームPythonの最初のバージョンはMac OS上で開発されたが、のちに多くのプラットフォーム上で動作するようになっている。
実装現在のところ、Pythonインタプリタには複数の実装が存在している:
ライセンスPython のリリースは全てオープンソースであり、PSF(Python Software Foundationライセンス)として配布されている。これはGPL互換とされているが、しかし、GPLと異なり、変更したバージョンを配布する際に変更をオープンソースにしなくてもよいとされている。 歴史Python の歴史
Pythonに影響を与えた言語
言語の機能Pythonは言語自身の機能をできるだけ小さくおさえ、ユーザがいつも必要とする最小限の機能のみを提供するように作られている。これはPerlのTIMTOWTDI(there's more than one way to do it - あることをするのにいくつものやり方がある)という哲学とは対照的であり、Pythonでは多くのユーザによって書かれた同一の仕事をするプログラムは、だいたいどれも同じようなコードに収束する。基本機能にないものの多くはライブラリによって提供されている。 また、Pythonではプログラムの文書化(ソフトウェアドキュメンテーション)が重視されており、言語の基本機能の一部となっている。Pythonはもともと教育用に設計されたためか、読みやすく、それでいて効率もよいコードをなるべく簡単に書けるようにするという思想がすみずみまで浸透しており、Pythonコミュニティでもわかりやすいコードをよしとする傾向が強い。 文法Pythonの文法は基本的にCやJavaなどとよく似ているが、Python独自の特徴のひとつにインデントを用いたブロック構造の定義がある。これは通常のCなどにおける中カッコによるブロック構造のかわりに、行頭からの空白(インデント)による「見た目のブロック構造」と「実際の論理的な制御構造」を結びつける手法で、視覚に訴えるコードの使用を強制している。なお、C/C++やJavaでは文末に 以下に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、上書き)することが可能である。 また、オブジェクトには任意のデータを入れることができる。これらのメソッドやデータは、基本的に、すべて ライブラリPythonには「電池が付属しています("Battery Included")」の発想があり、プログラマがすぐに使えるようなライブラリや統合環境があらかじめディストリビューションに含まれている。このため標準ライブラリは非常に充実しており、ここには正規表現をはじめOSのシステムコールやXML処理系、シリアライゼーション、HTTP、FTP等の各種通信プロトコル、電子メールやCSVファイルの処理、データベース接続(SQLiteを標準に含む)、GUIフレームワーク (Tkinter,wxPython)、そして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は教育用言語であるABCより発展したプログラミング言語であり、実際にプログラミング言語教育に使用され、成功を収めている。また方針として、「非技術者」向けといった利用方法を視野に入れながら開発され続けている。 ユーザPythonを使っている製品あるいはソフトウェアPythonを使っている製品あるいはソフトウェアの一覧を参照のこと。 Pythonを利用している企業・機関Pythonはおもに欧米の企業でよく使われている。大企業ではマイクロソフトやアップルなどのパッケージソフトウェア企業をはじめ、Google、Yahoo!、YouTube などの企業も利用している [1]。また携帯電話メーカーのNokiaでは、S60シリーズで Python アプリケーションが動く[2]。研究機関では、NASA[3] や日本の高エネルギー加速器研究機構[4]でPythonが使われている。
外部リンク
|
|||||||||||||||||||||||||||||||||||||||||||
This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.
Mercedes Car
This site monitored by SitePinger.net