初めてのPython 第2版

[cover photo]
TOPICS
発行年月日
PRINT LENGTH
752
ISBN
4-87311-210-9
原書
Learning Python, 2nd Edition
FORMAT
Print
5,280円
この商品は品切れ再入荷未定です

多くの開発現場で採用される強力な言語である一方で、習得が容易なことからプログラミング初学者に適した言語でもあるPython(パイソン)。本書は、Python入門者だけでなく、プログラミング初学者向けに書かれた良質なテキストです。新しいバージョンに基づくPythonの言語仕様だけでなく、オブジェクト指向によるプログラミング手法の基礎についても十分に学ぶことができます。26章まではPython言語の基本についてコード例を示しながら詳しく解説し、27章以降では言語の基本以外の重要事項として、具体的なコーディングテクニックなどを紹介しています。「ここまで読んだ方は、十分に『自分はPythonプログラマである』と名乗る資格があるでしょう(26章より)」とあるように、本書には、Pythonプログラマとなるために必要なすべてが書かれています。

目次

はじめに

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 演習問題の解答


索引