Python 101

"P"で始まるもう 1 つのスクリプト言語

コラムニスト Evelyn Mitchell が、多くの Linux コーダーにおなじみのユニークなオープン・ソース言語 Python について紹介します。Python のパワーとシンプルさに少しでも触れると、もう後には戻れなくなります。Evelyn は、Python を Perl, Java, および Tcl と比較し、明示的なコード・セグメントの観点から相違点を示しています。

David Mertz, President, Gnosis Software, Inc.

David Mertz is not really quite sure if the open source movement is a dinner party. But he would certainly like to think that proprietary intellectual property is a paper tiger. His own ideas, certainly, want to be free. David may be reached at mertz@gnosis.cx; his life pored over at his Web site. Suggestions and recommendations on this, past, or future columns are welcomed.



1999年 9月 01日

Python は "P" で始まるもう 1 つのスクリプト言語です。この名前はコメディー一座、モンティ・パイソン (Monty Python) にちなんで付けられたもので、Python の番組にしばしば現れるスキットとフィルムに対するリファレンスです。一般に Linux ユーザーやオープン・ソース・コミュニティーでよく知られている Python は、この記事で言及する Java や Perl のような他の言語をしのぐ数々の長所を持っています。

次の Hello World の例を見ながら検討に入っていきましょう。

#!/usr/bin/env python print "Hello World"

これは次のような結果になります。

Hello World

比較のため、ここに Perl による同じプログラムがあります。

#!/usr/bin/perl print "Hello World\n";

Python コードでいくつかの事にすぐ気がつかれたでしょう。次にコマンドを考察します。

#!/usr/bin/env python

Python の特長の 1 つに「移植性」があります。システム上の Python の実際の場所の代わりにこの #! 行を使用すると、/usr/bin/env を持つあらゆるシステムにこのコードを変更することなく移行できます (Perl でこれと同様の #! 行は、直接 Perl バイナリーをポイントします)。結果として、Java 以上に多くのプラットフォームで Python コードを実行することが可能になります。JPython を使用すれば、Java 仮想マシン内でも Python コードを実行することができます (「参考資料」 を参照)。

加えて、Python は「オープン・ソース言語」であるため、Java が持っているような OS 特有の問題をひきずっていません。(実際、Python にはいくつかの OS 特有の拡張機能があり、これは Microsoft オペレーティング・システム用のものだけではありません。たとえば SGI 特有のサウンド・ライブラリーがあります。これらの拡張機能にもかかわらず、Python で OS を意識しないプログラムを作成するのは非常に簡単です。

Python は「スクリプト言語」であるため、使用する前に定数や変数を定義する必要はありません。これにより、プロトタイプの問題に対する代替ソリューションを試しているときに、コード作成がスピードアップできます。

上記以外にも、Hello World の例が示しているように、Python は句読点をあまり使用しないことがあげられます。特に Python は、行の終わりを示すためのセミコロン(;) を使用しません。このため、Perl などの言語でミスタイプのためによくやる間違いを犯すことがありません。

また、Perl のように "Hello World" とタイプする必要がないことに気づかれると思います。これは Python の print ステートメントが、print の後にふつうは改行が必要だろうと想定してくれるのが理由です。改行が必要なければ、終わりにコンマを追加するだけです。コンマ演算子は次のようにスペースを挿入します。

print "Hello", "World"

これは次のような結果になります。

Hello World

下の例は、2 つのストリングをスペースを入れずに連結します。

Hello World

これは次のような結果になります。

HelloWorld

Python と Perl

Perl は Larry Wall (Perl の作成者) が記述した通り、最初のポストモダン・プログラム言語であり、Python は最初のネオクラシカル・プログラム言語と呼ぶことができます。

Python と Perl はどちらも、問題解決のために使用可能なツールに関する深い理解に基づいて構築されています。Larry Wall は、システム管理タスクを容易なものにするための言語を作成していたので、Perl の作成を開始したとき、プライマリー・デザインの妙案として awk, sed, およびシェル・スクリプトを用いました。Python はさらに、オブジェクト指向設計およびオブジェクト指向ツールによって促進されたものです。

Guido van Rossum (Python の設計者) は、Larry Wall のように表現力に富む言語のために努力するのではなく、コンポーネントからシステムを作成するための、シンプルで強力かつエレガントなベースを作成することを選びました。Python も表現力はそなえていますが、区画化(compartmentalize) される傾向にあり、これが Python コードをより読みやすいものにしています。コードの特定の行がどのように働くかについて詳細を知りたいときは、見かけ上の複雑な部分よりも、モジュールとそれが使用する関数について調べてみてください。


Python と Tcl

Tcl は見かけ上、Python によく似ています。どちらの言語もエレガントでシンプルなコードを作成できます。Tcl は基本的に、ストリング処理言語です。Tcl のデータ・タイプは、ストリングと、ストリングの 1次元の配列だけです。

Python はそれとは対照的に、数値 (整数、長整数、浮動小数点、8 進、16進、およびそれらの複合)、ストリング、リスト、ディクショナリー (Perl のハッシュのようにキーにより索引付けされた配列)、およびタプル (位置の変更不能な単純なリスト) を含む、さまざまなデータ・タイプを持っています。

Tcl と Python は同じ GUI ツールキットである Tk を共用します。Python の Tk へのインターフェースは Tkinter と呼ばれ、Python の最近のどのバージョンにも組み込まれています。Pythonでの GUI の構築は、Tk の使用によるものだけに限定されてはいません。Gimp Tool Kit (GTK) および GTK+ に対する Gnome 拡張機能も使用できます。


Python と Java

Java は、あらゆるタイプ、スレッド・サポート、ストロング・タイピング、および必要とされるその他の機能を網羅している、フル機能プログラム言語です。Python はスクリプト言語です。

ストロング・タイピングを使用または提供しないため、プロトタイピングには向いていますが、より複雑なインプリメンテーションでは問題が起こる可能性があります。スレッド・サポートは提供されていますが、Java のスレッド・サポートのように洗練されたものではありません。

しかし、Java か Python かを選択する必要はありません。JPython (「参考資料」 を参照) を使用すると、Java 仮想マシン内で実行される Python コードを作成することができます。パフォーマンス低下の心配もありません。事実、Python の JPython ポートでの動的データ・タイプのインプリメンテーションにおけるいくつかの最適化により、正規 C Python と JPython の間で著しい速度の向上が報告されています。


Python が Linux ユーザーに親しまれている理由

Python が Linux ユーザーの間で人気があることには、いくつか理由があります。Python ユーザーは Perl ユーザーとまったく重なる訳ではありませんが、Pythonを試したユーザーは、以下のような理由で使用を続ける傾向があります。

読みやすさ

Python では、当惑するほど難解なコードを作成することはほとんど不可能です。ブロックの区切りにはスペースが使用され、これによって明確なブロック構造ができます。構文は、モジュールおよび関数に対して一貫性のある呼び出し構造を持つ、すっきりとしたものになっています。

使い心地

Linux はまだ、どのデスクトップにもあるといった人気を博すほど広まっていません。Linux ユーザーは洗練された、違いの分かるユーザーである傾向があります。彼らユーザーの中の、Eric Raymond のような一部の人にとって、Pythonはエレガントですっきりとしたプログラム言語であることから好まれています。Mark Lutz (Programming Python の著者、「参考資料」 を参照) のようなその他の人々には、「Python は積み上げられたのではなくデザインされたように見える」ために好まれています。

オブジェクト・サポート

Python を使用すると、Java や C++ のような言語のようにシステム・プログラミング・レベルの複雑な構文を扱うことなく、オブジェクト指向の開発が可能になります。

開発の速さ

高速なプロトタイピング言語として、Tk や GTK のような GUI ツールキットの強力なサポートを持つ Python は、迅速にフル機能ソリューションを作成することを可能にします。これらのソリューションがパフォーマンス問題を被った場合、非常に簡単にパフォーマンス依存型コンポーネントの C リプレースメントに切り替えることができます。

相互運用性

Linux は優秀なグルー・オペレーティング・システムです。Windows のような他のタイプのオペレーティング・システムが少なくとも 1つある状況でよく使用されます。Python は移植性に優れたコードであり、一般的なオペレーティング・システムのすべて、また特殊なオペレーティング・システムの多くで使用可能なインタープリターをそなえています。このため、Linux でコードを作成し、この同じコードをシステム全体に展開することができます。またJPython を使用することで、Java 仮想マシン(JVM) をサポートする組み込みシステムでこれを使用することもできます。

再利用可能性

Linux は、Unix が多くの小さなツールで知られているように、カーネル・レベルでのモジュラー設計で知られています。Python もまたモジュールと呼ばれる、小さくてよくできたコンポーネントを使用しています。モジュールは設計および使用が容易であり、公式および非公式のコード・ライブラリーを促進します。Perl は公式の共通コード・リポジトリーでは優れていますが、Python の Comprehensive Perl Archive Network (CPAN) に匹敵するものはまだありません。

信頼性

Python コミュニティーは高品質コーディング標準を奨励しています。下の例は、独自のテスト・ルーチンを含むモジュールの作成の実際です。これらのルーチンは

if __name__ == '__main__':

で始まり、モジュールがスタンドアロン・プログラムとして実行される場合にのみ実行されます。モジュールが他のプログラムから呼び出される場合、このテスト・ルーチンはスキップされます。コンパイル/リンク・ステップはありません。Python はインタープリター言語であることに加えて、バイト・コンパイル言語でもあります。これは、最初に Python インタープリターがプログラムまたはモジュールを実行するとき、これらはバイト・コードに翻訳されることを意味します。このバイト・コードは .pyc としてディスクに書き込まれます。この後プログラムまたはモジュールが再実行されると、インタープリターは、.py ファイルより新しいタイムスタンプを持つ .pyc ファイルがあるかどうかをチェックします。このようなファイルがあった場合、バイト・コンパイル・ステップはスキップされ、コンパイル済みファイルがディスクから読み取られます。これにより実行時間を大幅に節約できます。

豊富なクラス・ライブラリー

ライブラリー・モジュールはほとんどの共通プログラミング・タスクで使用でき、完全 POSIX 準拠ルーチン、各種数学ライブラリー、各種 GUI ツールキットのサポート、CGI プログラミングのサポート、HTML と XML 生成と解析のサポートなどを含んでいます。モジュールの標準リストは Python.org (「参考資料」 を参照)にあります。


Python が適さないもの

Python はあらゆるプログラミング・タスクに対して完ぺきな言語ではありません。たとえば、デバイス・ドライバーやカーネルなどのシステム・レベル・プログラミングには適していません。これはレベルが高すぎるために、メモリー割り振りその他の低レベル・タスクに対して厳密な制御を行うことができないためです。また C その他のコンパイル言語に比べて相対的に遅いため、Python はコンピューター集約的なアプリケーションにはあまり適していませんが、このようなアプリケーションのフレームワーク または glue 言語として使用することができます。


Python を使用する人

Linux Python ユーザーのもっとも直接的な例は Red Hat です。Python をシステム管理ツールおよび構成ツールとして拡張的に使用しています。

Python を使用する他の企業としては DigitalCreations があります。この企業は、Python で書かれ、Python を拡張スクリプト言語として使用する Web オーサリング・システム Zope のソースをリリースするという条件のもとでベンチャー資本を手に入れました。

Python キャンプに参加した著名なプログラマーに Eric Raymond がいます。彼は Pythonを彼の Trove プロジェクトのためにインプリメンテーション言語として選択しました。また Bruce Eckel は Thinking in Java の著者であり、「Python には比類のない生産的な言語としての潜在能力がある」と言っています (Eckel の Python Project Workshop については「参考資料」 を参照)。


Python の入手方法

Linux ディストリビューションの多くには Python の比較的新しいバージョンが付属しています。最新バージョンの入手については、Python.org Web サイト (「参考資料」 を参照) にもっとも普及しているオペレーティング・システム用のバイナリーと、ソースおよび RPM ディストリビューションがあります。

参考文献

Web サイト:出版物:
  • Programming Python, Mark Lutz; O'Reilly, 1996. 多少古くなりましたが、現在もっとも完全な Python のプログラミング資料です。Appendix E のチュートリアルはお勧めです。
  • Learning Python, Mark Lutz and David Ascher; O'Reilly, 1999.
    たいへん読みやすい Python の入門書であり、Python とプログラミングに関心を持つ新人プログラマーにお勧めします。
  • Internet Programming with Python, Aaron Watters, Guido van Rossum, and Jim Ahlstrom.
    Python の伝道書的な本。Pythonコミュニティーの中でももっとも経験の豊かな 3 人のメンバーによって書かれたものです。この本は CGI スクリプト作成および HTML 文書の生成を含む、インターネット・プログラミングに焦点をあてています。やや古い本です。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=231746
ArticleTitle=Python 101
publish-date=09011999