仕事でもJavaで休日もJavaに疲れたので、Pythonに浮気してみる。英語版なら第5版まで出ているみたい。
1章 PythonについてのQ&A
- Pythonを使うメリットを6つあげてください。
- ソフトウェアのクオリティ、生産性の高さ、ポータビリティ、充実したライブラリ、コンポーネント の統合が容易、プログラミングが楽しい、の 6 つです。特に、ソフトウェアのクオリティ、生産性の 高さが、Python がプログラマに選ばれている理由でしょう。
- Pythonを利用している有名な企業、団体を4つあげてください。
- Google、ILM(Industrial Light & Magic)、ジェット推進研究所、ESRIなど。現在では、ソフトウェ ア開発に関わる企業はほとんどすべて、何らかのかたちで Python を利用していると言ってよいでしょ う。顧客に向けて販売する製品の開発に利用しているところもあれば、ソフトウェアのテスト、シス テム管理などを目的とした小規模なスクリプトの作成に利用しているところもあります。
- Pythonに欠点があるとしたら何ですか?
- Pythonの欠点はパフォーマンスです。C、C++などのコンパイラ言語に比べるとどうしてもパフォー マンスは低くなります。とはいえ、そのパフォーマンスは実用に耐える範囲です。ほぼどのような用 途でも、遅すぎて使えないということはないでしょう。たいていの場合、Python のコードは C で書 かれたコードとほとんど変わらない速度で動きます。Python インタプリタの内部でタスクがコンパ イル済み C コードに渡されることも多いからです。処理速度が非常に重要な意味を持つプログラムの 場合は、Python のスクリプトと、C などのコンパイラ言語で作ったエクステンションを組み合わせる ということもできます。数値計算プログラムなどはその例です。
- Pythonを使うとどんなことができますか?
- Pythonを使えば、コンピュータを使ってできる、ほとんどすべてのことができるはずです。Webサ イトの構築、ゲーム開発などの他、ロボットの開発、宇宙船の制御などにも応用が可能です。
- import thisは何のためのコマンドですか?
- import thisはPythonの隠し機能の1つで、実行するとPythonの基本思想を詳しく知ることができ ます。次章を読めば、このコマンドの実行の仕方がよくわかるはずです。
- この本のコード例に頻繁に“spam”という言葉が出てくるのはなぜですか?
- それは、Python という名前が、英国のコメディユニット「モンティ・パイソン」に由来するからです。
“spam”という言葉は、モンティ・パイソンの「スパム・スケッチ」というコントに出てきます。「老 夫婦が大衆食堂で注文をしようとするが、すべてのメニューにスパムが含まれている。客はヴァイキ ングばかりで、意味もなくスパムをたたえる歌を歌い出したりもする......」という内容です。spamは、 Python のスクリプトの中で変数名としてよく使用されます。
- それは、Python という名前が、英国のコメディユニット「モンティ・パイソン」に由来するからです。
2章 Pythonプログラムの実行
- Pythonインタプリタとは何ですか?
- Pythonインタプリタとは、Pythonプログラムを実行するためのプログラムのことです。
- ソースコードとは何ですか?
- ソースコードとは、テキスト形式で書かれたステートメントの集合です。ソースコードの収められたファイルはテキストファイルになり、通常は“.py”という拡張子を付けます。
- バイトコードとは何ですか?
- バイトコードは、Python がソースコードをコンパイルしてできるローレベルのコードのことです。
バイトコードのファイルには、自動的に“.pyc”という拡張子が付けられます。
- バイトコードは、Python がソースコードをコンパイルしてできるローレベルのコードのことです。
- PVMとは何ですか?
- PVMはPython Virtual Machine(Python仮想マシン)の略です。Pythonの「ランタイムエンジン」であり、バイトコードを読み取って実行するという役割を持っています。
- Pythonの実行システムのバリエーションにはどのようなものがありますか?
- Psyco、Shedskin、フローズンバイナリなど。
- CPython、Jython、IronPythonの違いは何ですか?
- CPythonは標準のPythonです。JythonとIronPythonは、それぞれJava環境、.NET環境に対応した Python インプリメンテーションです。それぞれにコンパイラが異なります。
3章 プログラムの起動法
- 対話型セッションの起動の仕方は?
- Windowsの場合、対話型セッションを起動するには、[スタート]メニューの[すべてのプログラム] からPythonのエントリを選択し、[Python(command line)]という項目を選択します。また、他の プラットフォームでは、システムのコンソールウィンドウで、pythonというコマンドを入力して実 行するという方法で同じことができます(Windows では、コマンドプロンプトウィンドウを使用し ます)。その他、IDLEを起動するという方法もあります。メインのPython Shellウィンドウが対話型 セッションになるからです。シェルの環境変数PATHの設定に、Pythonのインストールディレクトリ が指定されていない場合などには、単にpythonと入力するのではなく、Pythonのインストールディ レクトリに移動するか、Python の実行形式ファイルの完全パス(たとえば、Windows の場合なら C:\Python25\python)を入力しなくてはならない場合もあります。
- モジュールファイルを起動する場合、システムのコマンドラインはどこで入力すればよいですか?
- システムのコマンドラインを入力するのは、各プラットフォームのシステムコンソールです。 Windowsの場合はコマンドプロンプトウィンドウということになります。UNIX、Linux、Mac OS X などでは、xterm あるいはターミナルウィンドウです。
- Windowsの場合、ファイルアイコンをクリックする、というプログラムの実行方法には2つの問題があります。それは何ですか?
- まず 1 つは、実行結果がほんの一瞬だけ表示されて、すぐに消えてしまうことです。つまり、事実上、 誰も実行結果を見ることはできません(raw_inputというビルトイン関数を使えば、この問題は解 決できます)。もう 1 つの問題は、Python のエラーメッセージも一瞬で消えてしまうため、誰にも見 ることができないことです(システムのコマンドラインや IDLE などの IDE を使用して開発すれば、 この問題は起きません)。
- モジュールをリロードしなくてはならないのはどういう場合ですか?
- Pythonは、デフォルトでは、モジュールをプロセスにつき一度しかインポート(ロード)しません。 もし、ソースコードに変更を加えて、その変更を Python を停止、再起動させずに反映させたいと思 えば、リロードが必要になります。リロードをするためには、対象となるモジュールを少なくとも一 度インポートしている必要があります。システムのコマンドライン、アイコンクリック、IDLE など の IDE を使ってコードを実行した場合、通常、この問題は起きません。こうした方法を使った場合、 毎回最新バージョンのソースコードを使ってモジュールが実行されるからです。
- IDLEでプログラムを実行する手順は?
- テキスト編集ウィンドウに実行対象のコードを表示した状態で、ウィンドウの[Run]メニューから [Run Module]という項目を選択します。すると、ウィンドウに表示されたソースコードがトップレ ベルのスクリプトファイルとして実行され、実行結果がメインウィンドウ(Python Shellウィンドウ)に表示されます。
- IDLEを使用する場合、主に2つのことが問題になります。それは何ですか?
- IDLEは、プログラムの種類によってはハングアップする場合があります。特に、マルチスレッド(マ ルチスレッドはかなり高度なテクニックなので、本書では触れません)の GUI プログラムではその 危険性が高くなります。その他、IDLE には、初心者が容易にプログラミングできるように考えられ た便利な機能が用意されている、という点にも注意が必要です。そうした機能の中には、IDLE GUI 以外には応用のきかないものもあるからです。たとえば、IDLE 環境でモジュールを実行すると、モ ジュールをインポートしたのと同じことになり、そのコード中の変数が、それ以降、自動的に IDLE の対話型セッションで使えるようになります。他の環境では、そういうことがないので混乱する恐れ があります。
- 名前空間とは何ですか? モジュールファイルとどのように関係しますか?
- 名前空間とは、変数(名前)の集合です。Python のモジュールには、Python プログラムで利用できる様々 な「変数(名前)」の集まりという側面もあり、モジュールはすべて、自動的に名前空間となります。 トップレベルで代入が行われる変数(名前)の集合、ということです。プログラムをモジュールに分 けることは、変数の衝突を防ぐことに役立っているとも言えます。各モジュールは、自己完結型の名 前空間なので、別々のモジュールで定義されている限り、たとえ名前が同じ変数であっても、衝突が 生じることはありません。