Pythonとは?


目次

はじめに ▼
Pythonの機能 ▼
Pythonの特徴 ▼
SGMLへの応用 ▼
謝辞 ▼
Pythonのスクリプト ▼
オブジェクト指向 ▼

はじめに

 Pythonは,1990年頃にオランダのGuido van Rossum氏によって開発された新しい概念に基づくプログラミング言語で,以来,機能拡張を続けて,現在,バージョン1.5に達し,MacOS,UNIX,Windows95/NTといった各種のプラットフォームで実現しています。

 Pythonは,その機能の柔軟さや豊かさに加えて,何の制約もないフリーウェアということもあって,世界で広い支持を得ています。1998年になって,Mark Lutz著の“Programming Python”(O'Reilly and Associates社,1996年)の邦訳“Python入門”及び“Pythonプログラミング”(飯坂剛一他共訳,オライリー・ジャパン,1998年)の二分冊が刊行されたことによって,わが国でも普及が進むと思われます。


Pythonの機能

 Guido van Rossum氏が著した“Python Tutorial”からPythonの機能の要約を次に引用します。

 Pythonは,習得しやすい,強力なプログラミング言語です。Pythonは,効果的な高水準なデータ構造と,単純ながらオブジェクト指向プログラミングへの効果的なアプローチを持っています。Pythonの洗練された構文と動的な型付けは,その対話的性格と合わせて,多くの分野での急速な応用開発とスクリプティングのための理想的な言語をほとんどのプラットホームにおいて実現しています。

 Pythonインタプリターと広範な標準ライブラリーは,Pythonウェブサイト(http://www.python.org)から,主要なプラットホームのためのソースかバイナリーの形式で,自由に利用でき,さらに自由に配布できます。また,同サイトは,多くの,自由な,サードパーティが開発したPythonモジュール,プログラム,ツール,追加文書へのポインターも含んでいます。

 Pythonインタプリターは,C又は C++(又は,Cから呼び出し可能な他の言語)で実行された新しい関数とデータ型をもって容易に拡張されます。また,Pythonは,カスタマズ可能な応用のための拡張言語としても適当です。(中略)

 標準のオブジェクトとモジュールについては,“Python Library Reference ”を参照して下さい。“Python Reference Manual”は,言語について,より形式的に定義しています。C又はC++の拡張を書くには,“Extending and Embedding and the Python Interpreter”と“Python/C API manual”を読んで下さい。(後略)

 これらの説明書は,PDF版になっており,“http://www.cwi.nl/ftp/python/doc/pdf-1.5.tar.gz”からダウンロードできます。


Pythonの特徴

 Pythonの特徴は,Mark Lutz氏の“Programming Python”から引用すると,次のとおりです。プログラミング言語に精通している方は,これを見るだけでPythonの強力さを知ることができるでしょう。


SGMLへの応用

 Sean McGrath氏は,その著“PARSEME.1ST ; SGML for Software Developers”(Prentice Hall社,1998年)の中で,C++,Perl,Pythonの言語の特徴を踏まえた形でSGML処理に応用することを提案しています。とくにPythonを応用したPython Frameworkは,SGML文書のツリー構造を簡単に表現でき操作できる点で,他の言語による手続きよりも優れている印象を与えており,今後,PythonによるSGML処理の中核になると思われます。

 私(岸 和孝)は,ケーススタディとしてPython Frameworkを応用したEsisBrowserという特殊なブラウザーを開発してみました。1週間という短い期間で開発でき,Pythonの強力さが実感できました。


謝辞

 Python FrameworkのEsisBrowserへの応用とそのフリーウェアとしての公開については,原作者のSean McGrath氏と販権を持つPrentice Hall 社に快諾いただきました。ここに深く感謝申し上げます。


Pythonのスクリプト

 ここでは,Pythonを手短に理解するために,同じ処理を行なうようにしたPerlのスクリプトと比べてみましょう。

 次の例は,指定された名前のテキストファイルを読んで,その内容を1行づつ行番号付きで表示する処理です。なお,スクリプトの左側の番号は説明のためのものです。

 一見したところ,PerlとPythonでは,余り大きな違いはありません。しかし,よく比べれば,次のことに気が付くでしょう。


オブジェクト指向

 前述の例において,Pythonのオブジェクト指向的な特徴が現われている箇所は,ファイルの参照まわりです。Perlではファイルはファイルハンドラーで参照されますが,Pythonでは,ファイルは変数として扱われます。

 先ず,組み込み関数open()に引き数としてファイル名infilenameと読み取り指示rを与えて,その返却値を変数INに代入しています[3]。この変数INはオブジェクトとしてのファイルを指しています。

 次に,変数IN,すなわちファイルからデータを読み取る操作はIN.readlines()です[4]。ここで,readlinesをファイルオブジェクトに対するメソッドと呼んでいます。

 最後に,ファイルを閉じる[9]操作がIN.close()となるのは,closeがファイルオブジェクトに対するメソッドだからです。

 変数infilename,lno,textは,データというオブジェクトを指す名前です。これらは文字列や数値のオブジェクトを指しています。そうした基本的なオブジェクトに対する,加算や連結といった演算もメソッドと呼ばれます。

 Perlでは変数名はデータオブジェクトに付けた名前で,その名前はオブジェクトの記憶場所を表わしていますが,Pythonでは変数名はオブジェクトを指す名前です。Perlではサブルーチンの呼び出しにおいて,値渡し又は参照渡しを明示しますが,Pythonではメソッド(つまり,関数)の呼び出しにおいて常にオブジェクト参照渡しとなります。

 Perlはバージョン5からはオブジェクト指向プログラミングができるようになりましたので,Pythonとの比較が望まれるかもしれません。しかし,PerlはちょうどCがC++へと発展したような道を通っており,その基本はあくまでも従来のプログラム概念に基づいていますので,両者の優劣を論じることには余り意味がないと思っています。

▼Perlスクリプト


[1] # Perlによる処理
[2] print 'infile...' ; $infilename = <> chop($infilename) ;
[3] open IN, "<$infilename" ;
[4] $lno = 0 ;
[5] while ($text = <IN>) {
[6]     $lno = $lno + 1 ;
[7]     print "$lno\t$text" ;
[8] }
[9] close IN ;

▼Pythonスクリプト


[1] # Pythonによる処理
[2] infilename = raw_input('input file...')
[3] IN = open(infilename, 'r')
[4] lno = 0
[5] for text in IN.readlines() :
[6]     lno = lno + 1
[7]     print lno, '\t', text,
[8]
[9] IN.close()

(1998年11月記)


(c)1998 JAGAT