多くの開発現場で採用される強力な言語である一方で、習得が容易なことからプログラミング初学者に適した言語でもあるPython(パイソン)。本書は、Python入門者だけでなく、プログラミング初学者向けに書かれた良質なテキストです。新しいバージョンに基づくPythonの言語仕様だけでなく、オブジェクト指向によるプログラミング手法の基礎についても十分に学ぶことができます。26章まではPython言語の基本についてコード例を示しながら詳しく解説し、27章以降では言語の基本以外の重要事項として、具体的なコーディングテクニックなどを紹介しています。「ここまで読んだ方は、十分に『自分はPythonプログラマである』と名乗る資格があるでしょう(26章より)」とあるように、本書には、Pythonプログラマとなるために必要なすべてが書かれています。
初めてのPython 第2版
Mark Lutz, David Ascher 著、夏目 大 訳
- TOPICS
- 発行年月日
- 2004年11月
- PRINT LENGTH
- 752
- ISBN
- 4-87311-210-9
- 原書
- Learning Python, 2nd Edition
- FORMAT
目次
はじめに I部 Pythonの基礎知識 1章 PythonについてのQ&A 1.1 Pythonを使うメリットは何ですか? 1.1.1 ソフトウェアのクオリティ 1.1.2 生産性の高さ 1.2 Pythonはスクリプト言語なのですか? 1.3 Pythonの欠点は何ですか? 1.4 Pythonのユーザ数はどのくらいですか?また、どんな人がPythonを使っているのですか? 1.5 Pythonを使うとどんなことができるのですか? 1.5.1 システムプログラミング 1.5.2 GUI 1.5.3 インターネットスクリプティング 1.5.4 コンポーネントインテグレーション 1.5.5 データベースプログラミング 1.5.6 ラピッドプロトタイピング 1.5.7 数値計算プログラミング 1.5.8 ゲーム、画像処理、AI、XML、その他... 1.6 Pythonの技術的な長所は? 1.6.1 オブジェクト指向 1.6.2 フリー 1.6.3 ポータブル 1.6.4 高機能 1.6.5 他言語との連携が容易 1.6.6 使いやすい 1.6.7 学習しやすい 1.7 他言語とPythonの比較 2章 Pythonプログラムの実行 2.1 Pythonインタープリタ 2.2 プログラムの実行 2.2.1 プログラマの視点 2.2.2 Pythonインタープリタの視点 2.3 実行モデルのバリエーション 2.3.1 Pythonシステムの種類 2.3.2 Psyco(Just In Timeコンパイラ) 2.3.3 フローズンバイナリ 2.3.4 今後の予測 3章 プログラムの起動方法 3.1 対話型プログラミング 3.1.1 対話型プロンプト利用上の注意 3.2 プログラム(モジュール)ファイル 3.2.1 システムのコマンドラインを使用してPythonプログラムを実行する際の注意事項 3.2.2 UNIXの実行可能スクリプト 3.3 Windowsのファイルアイコン 3.3.1 アイコンクリックによるプログラムの起動 3.3.2 raw_input関数 3.3.3 アイコンクリックによる起動のその他の問題点 3.4 モジュールのインポートとリロード 3.4.1 モジュールの属性 3.4.2 インポート、リロードだけに頼るのは危険 3.5 IDLEユーザインタフェース 3.5.1 IDLEの基礎 3.5.2 IDLEの使用に関する注意事項 3.6 IDLE以外のIDE 3.7 他の言語のプログラムへの組み込み 3.8 フローズンバイナリ 3.9 テキストエディタによるプログラムの起動 3.10 その他の起動方法 3.11 今後の可能性 3.12 起動方法の選択 3.13 I部のまとめ演習 II部 ビルトインオブジェクト 4章 数値 4.1 Pythonプログラムの構造 4.2 ビルトインオブジェクト 4.3 数値 4.3.1 数値リテラル 4.3.2 ビルトインツールとエクステンション 4.4 Pythonの式と演算子 4.4.1 演算子の組み合わせ(優先順位) 4.4.2 優先度を明確にするにはカッコを使う 4.4.3 式中での型の混在 4.4.4 演算子のオーバーロード 4.5 数値の使用例 4.5.1 変数と演算 4.5.2 数値の表現 4.5.3 除算の種類 4.5.4 ビット演算 4.5.5 長整数 4.5.6 複素数 4.5.7 16進数と8進数 4.5.8 数値処理のためのツール 4.6 ダイナミックな型付け 4.6.1 変数の扱い 4.6.2 値を変更できるオブジェクト 4.6.3 リファレンスとガーベージコレクション 5章 文字列 5.1 文字列リテラル 5.1.1 シングルクォーテーションとダブルクォーテーションは同じ意味を持つ 5.1.2 エスケープシーケンス 5.1.3 raw文字列 5.1.4 トリプルクォーテーション 5.1.5 Unicode文字列 5.2 文字列の利用 5.2.1 基本的な演算 5.2.2 インデクシングとスライシング 5.2.3 文字列、数値間の変換 5.2.4 文字列に変更を加える 5.3 文字列フォーマット 5.3.1 文字列フォーマットに使用するコード 5.4 文字列のメソッド 5.4.1 文字列メソッドの呼び出しパターン 5.4.2 文字列メソッドの使用例:文字列の分解 5.4.3 stringモジュール 5.5 型のカテゴリー 5.5.1 カテゴリーが同じなら行える操作も同じ 5.5.2 不変性を持つオブジェクト 6章 リストとディクショナリ 6.1 リスト 6.2 リストの利用 6.2.1 基本的な操作 6.2.2 インデクシング、スライシング、行列の表現 6.2.3 リストへの変更 6.3 ディクショナリ 6.4 ディクショナリの利用 6.4.1 基本的な操作 6.4.2 ディクショナリの変更(上書き) 6.4.3 ディクショナリのメソッド 6.4.4 ディクショナリの応用例 6.4.5 ディクショナリ使用上の注意点 7章 タプル、ファイルオブジェクト、その他 7.1 タプル 7.1.1 タプルはなぜ必要か 7.2 ファイル 7.2.1 ファイルオブジェクトの使用例 7.3 ビルトイン型の分類 7.4 複合型オブジェクトの類似点、相違点 7.5 リファレンスとコピー 7.6 比較とブール値 7.7 ビルトインオブジェクト間の関係 7.8 その他のオブジェクト 7.9 ビルトインオブジェクトに関する注意事項のまとめ 7.9.1 変数にオブジェクトを代入すると、コピーではなく、リファレンスが作られる 7.9.2 繰り返し演算によるネスト 7.9.3 循環オブジェクト 7.9.4 不変性オブジェクトは上書きができない 7.10 II部のまとめ演習 III部 ステートメント 8章 代入ステートメント、式ステートメント、printステートメント 8.1 代入ステートメント 8.1.1 変数名に関するルール 8.1.2 拡張代入ステートメント 8.2 式 8.3 printステートメント 8.3.1 Hello Worldプログラム 8.3.2 出力ストリームのリダイレクト(出力先の変更) 9章 ifステートメント 9.1 ifステートメントとは 9.1.1 ifステートメントの形式 9.1.2 ifステートメントの例 9.2 Pythonの構文に関するルール 9.2.1 ブロックの区切り 9.2.2 ステートメントの区切り 9.2.3 1行1ステートメントの原則に従わないコードの例 9.3 Pythonのブール演算 10章 whileループとforループ 10.1 whileループ 10.1.1 whileステートメントの形式 10.1.2 whileステートメントの使用例 10.2 break、continue、passステートメントとelseブロック 10.2.1 break、continueステートメントやelseブロックを含むwhileループの形式 10.2.2 break、continue、passステートメントやelseブロックを含むwhileループの例 10.2.3 ループのelseブロックのメリット 10.3 forループ 10.3.1 forステートメントの形式 10.3.2 forループの使用例 10.4 特殊なforループ 10.4.1 range関数の利用 10.4.2 シーケンスへの変則的なアクセスへのrange関数の利用 10.4.3 シーケンスを更新するforループ 10.4.4 zip関数の利用 10.4.5 zip関数を利用してディクショナリを作成する 11章 Pythonのドキュメント 11.1 ドキュメントについての基礎知識 11.1.1 ドキュメントの種類 11.1.2 # を使用したコメント 11.1.3 dir関数 11.1.4 ドキュメンテーション文字列 11.1.5 PyDoc:help関数 11.1.6 PyDoc:GUIインタフェース 11.1.7 標準マニュアルセット 11.1.8 Webサイト 11.1.9 Pythonに関する書籍 11.2 ステートメント、構文についての注意事項 11.3 III部のまとめ演習 IV部 関数 12章 関数の基礎 12.1 関数とは 12.2 関数のコードの書き方、関数の使い方 12.2.1 defステートメント 12.2.2 defステートメントのネスト 12.3 関数の実例1 12.3.1 定義 12.3.2 呼び出し 12.3.3 ポリモーフィズム 12.4 関数の実例2 12.4.1 定義 12.4.2 呼び出し 12.4.3 ポリモーフィックな関数 12.4.4 ローカル変数 13章 スコープと引数 13.1 スコープに関するルール 13.1.1 スコープの基礎知識 13.1.2 LEGBルール 13.1.3 コード例 13.1.4 ビルトインスコープ 13.2 globalステートメント 13.3 ネストスコープ 13.3.1 変数の扱い 13.3.2 ネストスコープを持つコードの例 13.4 引数 13.4.1 引数と共有リファレンス 13.4.2 呼び出し側への影響を回避する 13.4.3 参照渡しと同様の結果を得る 13.5 引数のバリエーション 13.5.1 位置によるマッチングと名前によるマッチング 13.5.2 *と**の使用例 13.5.3 キーワード引数とデフォルト値を組み合わせる 13.5.4 引数のバリエーションの応用例 13.5.5 2つの関数 13.5.6 引数に関する注意事項 14章 関数に関連する高度なテクニック 14.1 lambda式 14.1.1 lambda式の基本 14.1.2 lambda式の特徴 14.1.3 ステートメントを式に書き直す 14.1.4 lambda式とネストスコープ 14.2 apply関数 14.2.1 apply関数の使用例 14.2.2 apply関数を使用しない方法 14.3 map関数 14.4 map関数と類似した関数 14.5 リスト内包表記 14.5.1 簡単なリスト内包表記の例 14.5.2 リスト内包表記で使用するループとif 14.5.3 リスト内包表記のデメリット 14.6 ジェネレータとイテレータ 14.6.1 ジェネレータの例 14.6.2 イテレータとビルトイン型 14.7 関数を作る際のコツ 14.7.1 関数はオブジェクトとして扱われる 14.8 関数についての注意事項 14.8.1 変数がローカルスコープに属するかどうかはスタティックに決定される 14.8.2 デフォルト値が可変性オブジェクトである場合は上書きに注意 14.8.3 戻り値のない関数 14.9 IV部のまとめ演習 V部 モジュール 15章 モジュールとインポート 15.1 モジュールを利用するメリット 15.2 Pythonプログラムの基本構造 15.2.1 トップレベルファイルとモジュール 15.2.2 インポートと属性 15.2.3 標準ライブラリモジュール 15.3 インポートの処理 15.3.1 インポート対象のモジュールファイルを探す 15.3.2 見付かったファイルのコードをコンパイルする 15.3.3 モジュールのコードを実行する 16章 モジュールのインポート、リロード 16.1 モジュールの作成 16.2 モジュールを利用する 16.2.1 importステートメント 16.2.2 fromステートメント 16.2.3 from *ステートメント 16.2.4 インポートは1回だけ行われる 16.2.5 importステートメント、fromステートメントでは「代入」が行われる 16.2.6 変数の更新 16.2.7 importとfromの違い 16.3 名前空間としてのモジュール 16.3.1 モジュールファイルから名前空間へ 16.3.2 属性へのアクセス 16.3.3 インポートとスコープの関係 16.3.4 名前空間のネスト 16.4 モジュールのリロード 16.4.1 reload関数 16.4.2 リロードの実例 17章 パッケージインポート 17.1 パッケージインポートのためのコード 17.1.1 パッケージインポートとモジュールサーチパス 17.1.2 __init__.pyファイル 17.2 パッケージインポートの実例 17.2.1 パッケージインポートにおけるfromとimportの違い 17.3 パッケージインポートのメリット 17.3.1 プログラム間でのモジュール名の重複 18章 モジュールに関連する高度なテクニック 18.1 データの隠蔽 18.1.1 下線と__all__属性 18.2 拡張機能を有効にする 18.3 __name__属性 18.4 プログラムの中でモジュールサーチパスの設定を変更する 18.5 モジュールに別名を付ける 18.6 モジュールの設計 18.6.1 メタプログラム 18.7 モジュールについての注意事項 18.7.1 import、fromに指定するモジュール名は「変数名」 18.7.2 fromによって作られる変数と元の変数の間につながりはない 18.7.3 トップレベルのコードではステートメントの順序に注意 18.7.4 再帰インポート 18.7.5 fromによってコピーされた変数はリロードに影響を受けない 18.7.6 fromステートメントと対話型コマンドライン 18.7.7 リロードは自動的には行われない 18.8 V部のまとめ演習 VI部 クラスとオブジェクト指向プログラミング 19章 Pythonでのオブジェクト指向プログラミング 19.1 クラスとは 19.2 オブジェクト指向プログラミング 19.2.1 属性の検索 19.2.2 オブジェクトツリーの作成 19.2.3 コードの再利用、カスタマイズ 20章 クラスのコーディング 20.1 インスタンスオブジェクトは1つのクラスから複数作ることができる 20.1.1 クラスオブジェクト 20.1.2 インスタンスオブジェクト 20.1.3 クラスの実例 20.2 クラスは継承によってカスタマイズできる 20.2.1 サブクラスの実例 20.2.2 クラスとモジュール 20.3 クラスでは演算子のオーバーロードができる 20.3.1 演算子のオーバーロードの実例 20.3.2 演算子のオーバーロードをしないとどうなるか 21章 クラスのコーディング(2) 21.1 classステートメント 21.1.1 classステートメントの書式 21.1.2 classステートメントの実例 21.2 メソッド 21.2.1 メソッドの例 21.2.2 スーパークラスのコンストラクタを呼び出す 21.2.3 特殊なメソッド 21.3 継承 21.3.1 属性ツリーの構築 21.3.2 継承したメソッドのカスタマイズ 21.3.3 サブクラスのバリエーション 21.3.4 抽象クラス 21.4 演算子のオーバーロード 21.4.1 演算子オーバーロード用のメソッド 21.4.2 __getitem__ 21.4.3 __getitem__と__iter__ 21.4.4 __getattr__と__setattr__ 21.4.5 __repr__と__str__ 21.4.6 __radd__ 21.4.7 __call__ 21.4.8 __del__ 21.5 名前空間に関する注意事項 21.5.1 非修飾名 21.5.2 修飾名 21.5.3 値が代入される場所 21.5.4 名前空間の実体はディクショナリ 21.5.5 __class__属性とクラスの__bases__属性 22章 クラスと設計 22.1 Pythonとオブジェクト指向プログラミング 22.1.1 引数によって機能が変わるメソッドを作る 22.2 クラスをデータの集合として使う 22.3 IS-A関係 22.4 HAS-A関係 22.4.1 Processorクラス 22.5 デリゲーション 22.6 多重継承 22.7 ファクトリ 22.7.1 ファクトリのメリット 22.8 結合メソッドと非結合メソッド 22.9 ドキュメンテーション文字列 22.10 クラスとモジュール 23章 クラスに関連する高度なテクニック 23.1 ビルトインオブジェクトの拡張 23.1.1 デリゲーションによる拡張 23.1.2 サブクラス作成によるビルトインオブジェクトの機能拡張 23.2 属性の「隠蔽」 23.2.1 ネームマングリングとは 23.2.2 ネームマングリングを行うメリット 23.3 新スタイルクラス 23.3.1 ダイアモンド継承への対処の違い 23.3.2 新スタイルクラスのその他の特徴 23.4 クラスについての注意事項 23.4.1 属性変更の副作用 23.4.2 多重継承したクラスの優先順位 23.4.3 メソッドをインスタンスなしで呼び出すことはできない 23.4.4 メソッド、クラスを関数にネストした場合のスコープ 23.4.5 プログラムの抽象化 23.5 VI部のまとめ演習 VII部 例外 24章 例外の基礎 24.1 例外の用途 24.1.1 例外の役割 24.2 例外処理の基本 24.3 try/except/elseステートメント 24.3.1 tryステートメントのブロック 24.3.2 elseブロック 24.3.3 デフォルトの例外処理 24.3.4 ビルトイン例外の処理 24.4 try/finallyステートメント 24.4.1 try/finallyステートメントの例 24.5 raiseステートメント 24.5.1 ユーザー定義例外の発生と処理 24.5.2 例外とともにデータを渡す 24.5.3 例外の再発生 24.6 assertステートメント 24.6.1 プログラム開発への例外の応用 25章 文字列例外とクラス例外 25.1 文字列例外 25.2 クラス例外 25.2.1 クラス例外の実例 25.2.2 クラス例外のメリット 25.2.3 ビルトイン例外 25.2.4 メッセージの改良 25.2.5 インスタンスに例外に関する情報を持たせる 25.3 raiseステートメントの書式 26章 例外と設計 26.1 例外ハンドラのネスト 26.1.1 関数呼び出しによるネスト 26.1.2 コード上でのネスト 26.2 例外の活用方法 26.2.1 例外はエラーに対応するとは限らない 26.2.2 処理結果の通知 26.2.3 プログラムのコード全体をtryステートメントの中に入れる 26.2.4 テストプログラムの作成 26.3 例外に関する「設計」の問題 26.3.1 どのコードをtryステートメントに入れるか 26.3.2 exceptブロックの対応範囲を広げ過ぎない 26.3.3 対応範囲が狭すぎるのも問題 26.4 例外についての注意事項 26.4.1 文字列例外のマッチングはオブジェクトが同一かどうかを基準に行われる 26.4.2 余分な例外を捕まえないようにする 26.5 言語の「コア部分」以外についての解説 26.5.1 Pythonのツールセット 26.5.2 大規模プログラムのための開発ツール 26.6 VII部のまとめ演習 VIII部 その他の重要事項 27章 使用頻度の高いコーディングテクニック さらに学習を進めるために... 27.1 型の変換 27.2 文字列の操作 27.2.1 stringモジュール 27.2.2 正規表現 27.3 データ構造の操作 27.3.1 コピーの作成 27.3.2 ソート 27.3.3 要素の並び順の無作為化 27.3.4 独自のデータ構造の作成 27.3.5 サブクラスの作成 27.4 ファイル、ディレクトリの操作 27.4.1 osモジュールとos.pathモジュール 27.4.2 ファイル、ディレクトリのコピー:shutilモジュール 27.4.3 複数の関数の組み合わせ 27.4.4 globモジュール 27.4.5 一時ファイル 27.4.6 入出力の操作 27.4.7 パイプ 27.4.8 コマンドラインに指定した複数のファイルを同時に操作する 27.4.9 複数のファイルからデータを読み込む 27.4.10 バイナリデータの扱い:structモジュール 27.5 インターネット関連のモジュール 27.5.1 CGI(Common Gateway Interface):cgiモジュール 27.5.2 URL:urllibモジュールとurlparseモジュール 27.5.3 各種プロトコルに対応するモジュール 27.5.4 インターネットデータの処理 27.5.5 XML関連のモジュール 27.6 他のプログラムの実行 27.7 デバッグ、時間の計測、プロファイリング 27.7.1 pdb 27.7.2 unittestモジュール 27.7.3 時間の計測 27.8 まとめ演習 28章 フレームワーク 28.1 自動苦情受付システム 28.1.1 HTMLコード 28.2 COMとのインタフェース:詫び状の自動作成 28.3 TkinterベースのGUIエディタでフォームへの入力データを閲覧する 28.3.1 トップレベルファイル 28.3.2 インタフェースの選択 28.4 Jython:PythonとJavaの融合 28.4.1 Javaライブラリへのアクセス 28.5 まとめ演習 29章 Pythonのコミュニティサードパーティソフトウェア 29.1 コミュニティのレベル 29.1.1 「コア」のコミュニティ 29.1.2 ローカルユーザグループ 29.1.3 カンファレンスとワークショップ 29.1.4 疑問の解消 29.1.5 SIG(Special Interest Group) 29.1.6 python-dev 29.1.7 最新情報を得る 29.2 Python言語の開発についての情報 29.3 サポートベンダ 29.4 Pythonの法律上の所有者:PSF(Python Software Foundation) 29.5 Python関連のソフトウェア 29.5.1 検索エンジンで探す 29.5.2 メーリングリストのアーカイブで探す 29.5.3 Vaults of Parnassusを参照する 29.5.4 PyPI(Python Package Index)を利用する 29.5.5 Python Cookbookを利用する 29.6 主要なサードパーティソフトウェア 29.6.1 Windows、Macintoshへのインタフェース 29.6.2 特殊な目的のためのライブラリ 29.6.3 GUIツールキットへのインタフェース 29.6.4 C、C++、Fortranへのインタフェース 29.6.5 便利なモジュール 29.6.6 パッケージングツール 29.7 Webアプリケーションフレームワーク 29.7.1 Zope 29.7.2 Twisted 29.7.3 Quixote 29.7.4 その他(Webware、Spyce) 29.8 編集、デバッグのためのツール IX部 付録 付録A インストールと環境設定 付録B 演習問題の解答 索引