綺麗な夕日をみたいと思う、 都会に住む人

都会の便利なところに住みたいと思う、小さな島国の人

高い山を見たいと思う、草原に住む人

象を見たいと思う、高い山に住む人

みんな地球という、星に住んでいる

Pythonの基礎知識

Python とは

Python は Guido van Rossum 氏による、フリーなオブジェクト指向プログラミング言語です。 Red Hat 系 Linux ではインストーラや環境設定ツールの開発言語として利用されているので、Python スクリプトをご覧になったことのある方も多いのではないでしょうか。

もちろん、Python は Red Hat 以外でもいろいろなアプリケーションの開発に使用されています。 有名なフリーウエアをいくつかあげてみると

などがあります。 この顔ぶれをみると、Python はシステム管理からデスクトップアプリケーション、サーバアプリケーションまで、幅広く応用可能なプログラミング言語であることがわかると思います。 また、上記のアプリケーションはそれぞれの分野で高く評価されているものばかりで、Python が実用的で生産性に優れたプログラミング言語であることを実証しています。

また、Python は非常に習得しやすい言語で、初心者が学習するためにも最適な言語となっています。 アメリカでは Python を学習用言語とするプログラミング教育プロジェクト CP4E(Computer Programming For Everybody)が、DARPA(米国防衛高等研究企画庁)からの出資を得て活動しています。

Python の特徴

Python の開発は、1990 年ごろから開始されています。 開発者の Guido van Rossum は教育用のプログラミング言語「ABC」の開発に参加していましたが、ABC は実用上の目的にはあまり適していませんでした。 このため、Guido はより実用的なプログラミング言語の開発を開始し、英国 BBC 放送のコメディ番組「モンティ パイソン」のファンである Guido はこの言語を「Python」と名づけました。

このような背景から生まれた Python の言語設計は、「シンプル」で「習得が容易」という目標に重点が置かれています。 多くのスクリプト系言語ではユーザの目先の利便性を優先して色々な機能を言語要素として取り入れる場合が多いのですが、Python ではそういった小細工が追加されることはあまりありません。 言語自体の機能は最小限に押さえ、必要な機能は拡張モジュールとして追加する、というのが Python のポリシーです。

しかしながら、Python はシンプルがとりえの初心者用プログラミング言語、ではありません。 より高度なプログラミング上のテクニックや、大規模開発をサポートするための機能を備えています。 Python の主な特徴を以下にあげます:

また、Python には、テキスト処理から GUI、インターネットプロトコルまで、とても豊富なライブラリが標準で添付されています。 ほんの一部を紹介すると:

標準モジュール以外にも多くのモジュールが世界中で開発・公開されています。 多くの GUI ライブラリや Oracle, SyBase などの商用 RDB にアクセスするためのモジュールも公開されていますので、ビジネス用途でのプロジェクトでも Python を採用することができます。

Python の実際

簡単なPythonスクリプトを動かして見ましょう。

print "Hello World!"

リスト 1: greeting.py

リスト 1 の greeting.py をエディタで作成し、次のようにして起動します。

%python greeting.py
Hello World!

見事にご挨拶が返ってきました。 Python はスクリプトファイルを読みこんで実行するだけでなく、対話モードで使用することもできます。

%python
Python 1.5.2 (#15, Apr  14 2000, 12:44:21)  [GCC 2.7.2.3] on linux2
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam 
>>> print "Hello World!"
Hello World!

>>> a = 1
>>> b = 2
>>> print a+b
3
>>>^D
%

Python の文法は一般的なもので、とても親しみやすいのですが、一つだけ変わった特徴があります。 それは「ブロックの範囲をインデントで決定する」というものです。

たとえば C のプログラムでは

int foo(int a) {
    if (a > 100) {
        return 1;
    } else {
        return 0;
    }
}

のように関数や if 文の範囲は "{" と "}" で指定しますが、Python ではインデント、つまり行頭のスペースとタブの数で指定します。 上の C プログラムと同等な Python スクリプトは、次のようになります。

def foo(a):
    if a > 100:
        return 1
    else:
        return 0

この方式を採用しているプログラミング言語は多くはなく、あまり見かけない書き方なので違和感を感じる人もいると思います。 が、慣れてみればとても読みやすく、誰が書いても統一されたフォーマットとなるのでプログラムの保守が容易になる、というメリットがあります。

それでは、もう少し実用的なスクリプトを作ってみましょう。 リスト 2 は、指定された URL からファイルを読みこみ、gzip で圧縮して出力するスクリプトです。

#! /usr/bin/env python
import sys, os, urllib, gzip

def GetAndGzip(url, out):
    '''GetAndGzip(url, out) 
    urlを読みこみ、gzipで圧縮してファイル out に出力する
    '''
    remote = urllib.urlopen(url).read()
    gzfile = gzip.GzipFile(filename='', mode='wb', fileobj=out)
    gzfile.write(remote)
    gzfile.close()

# パラメータを抽出
if len(sys.argv) <> 2:
    print '使い方: python wgetgz.py url'
else:
    url = sys.argv[1]
    GetAndGzip(url, sys.stdout)

リスト 2: wgetgz.py

wgetgz.py を作成し、

% python wgetgz.py http://www.yahoo.com > yahoo.gz

として実行すると、Yahoo のトップページがダウンロードされ、gzip で圧縮して yahoo.gz に保存されます。 標準モジュール gzip を利用してファイルを圧縮していますので、gzip コマンドがインストールされていない Windows などでもそのまま実行することができます。

最後に、CGI プログラミングに Python を利用した例をあげてみます(リスト 3)。 この例ではフォームから入力値を取得するのに標準モジュールの cgi を使用しています。 他にも CGI プログラミングをサポートするモジュールが幾つもありますので、効率的なシステムの開発が可能です。

#! /usr/bin/env python
import cgi

# 入力フォーム
_input_form = '''Content-Type: text/html

<html>
<head>
    <title>Python CGI サンプル</title>

</head>
<body>
<h1>Python CGI サンプル</h1>
<form action="test.cgi">
    <p>お名前をどうぞ:<input name="inputname">
    &nbsp;
    <input type="submit"></p>

</form>
</body>
</html>
'''

# 出力フォーム
_output_form = '''Content-Type: text/html

<html>
<head>
    <title>Python CGI サンプル</title></head>

</head>
<body>
<h1>Python CGI サンプル</h1>
<p> %s さん、こんにちは</p>
</body>
</html>

'''

form = cgi.FieldStorage()
if form.has_key('inputname'):
    # inputname が指定されていたら、ご挨拶を表示
    inputname = form['inputname'].value
    print _output_form % inputname
else:
    # 入力フォームを表示
    print _input_form

リスト 3: pycgi.cgi

2 つの Python: CPython と Jython

Python には、2 種類の実装系が存在します。 一つはこれまで解説してきた C 言語による実装系で、通常「Python」と言えばこの「CPython」を指します。 もう一つの実装系は「Jython」と呼ばれ、Python 言語の 100% Pure Java による実装系です。

Jython は Python スクリプトレベルでは CPython と互換性があり、多くの CPython 用スクリプトをそのまま実行することができます。 さらに Jython では Java で定義されているクラスを、Python のクラスとして使用することができます(リスト 4)。

import java		# Java クラスライブラリをインポート
from java.awt import *

def exit(e): 
    java.lang.System.exit(0)

frame = Frame('Software Design', visible=1)
button = Button('Python Rules!', actionPerformed=exit)
frame.add(button, 'Center')
frame.pack()

リスト 4: jgreeting.py

また、Jython も CPython と同様、対話モードで利用することができます。 自作の Java クラスをデバッグする場合など、この Jythonの対話モードは非常に重宝します。 いちいちテスト用の Java プログラムを書かなくても、さっと Jython を立ち上げてコンソールでロード & テストできるので、テスト -> 修正 -> 再テストのサイクルをスムーズに流すことができます。

最後に

筆者は、Python は現在利用可能なプログラム開発言語の中でもトップクラスの実用性・汎用性を備えた言語だと考えています。 その魅力のすべてをこのページで伝えることは到底できませんが、近年のユーザ数・書籍数の増大はその証拠と言えるでしょう。 まだ Python 未経験な方々に、その優れた環境を享受することをお勧めします。