トップページ | Python 標準ドキュメント | 事例集 | アーティクル | リンク集 | ダウンロード | サイトマップ 
468x60サイズバナー・シリーズC Simple Fun and Indented
コンテンツ
Pythonの紹介
Instant Python - Python入門
Instant Hacking - プログラミング経験のない人に
Top
 
Python Powered
Powered by Zope
PyJUG網元衆










プログラミング言語 Python の紹介

Software Design(技術評論社刊) 2000 年 9 月号
最新 Unix スクリプトプログラミング事情 − Python 入門 より転載

Python とは

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

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

  • Sketch - ベクタードローツール
  • PySol - なんと数百種類(!)ものカードゲームが楽しめる、ソリテアゲーム集
  • Zope - WEB アプリケーションサーバ
  • MailMan - メーリングリスト マネージャ
PySol

などがあります。 この顔ぶれをみると、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 の主な特徴を以下にあげます:

  • オープンソース(商用利用も含め、無償で利用・再配布可)
  • マルチプラットフォーム(Unix, Windows, Macintosh, etc...)
  • インタープリタ
  • オブジェクト指向言語
  • モジュール機構
  • リストや辞書、複素数など、豊富な組み込みデータ型
  • 例外処理
  • クラスや関数などもオブジェクトとして扱うことができる
  • マルチスレッド対応
  • 豊富な拡張ライブラリ
  • C/C++ による拡張が簡単
  • C/C++ アプリケーションへの組み込みが簡単

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

  • Tkinter -- Tcl/Tk の Tkライブラリを使用した GUI ライブラリ
  • ftplib, httplib, etc -- ftp, http クライアント機能を提供する。 他にも telnet、nntp, gopher クライアント等が提供されている。
  • xmllib, htmllib -- XML, HTML パーサ
  • etc...

標準モジュール以外にも多くのモジュールが世界中で開発・公開されています。 多くの 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
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

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

最後に

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


印刷用ページ
Copyright © 2001-2009 Python Japan User's Group.

警告当サイトの文書・画像等のコンテンツの著作権は、各コンテンツの作成者、もしくは日本Pythonユーザ会に帰属します。
 また、日本Pythonユーザ会はサイト内のコンテンツに他のプログラミング言語からの乗り換えを誘発する恐れのある表現が多々あることを認め、予めお詫び申し上げます。