書誌と一口コメント
書誌_独習Python 第2版:山田 祥寛

一口コメント
要約と目次
「独習Python 第2版」の概要と主要テーマ
要旨
本書「独習Python 第2版」は、プログラミング言語Pythonの基礎から応用までを体系的かつ網羅的に解説する「標準教科書」である。Python 3.13に対応し、非同期処理や型ヒントといった現代的な仕様を取り入れ、初心者からより高度な実践を目指す学習者までを対象としている。本書は、Pythonが機械学習分野だけでなく、サーバーサイド開発、システム管理、IoTなど幅広い分野で活用される成熟した言語であるとの認識に基づき、単なるサンプルコードの模倣ではなく、言語仕様の確かな理解を通じて、問題解決能力の源泉となる知識の習得を目指す。
構成は「解説・例題・練習問題」の3ステップ学習を基本とし、イントロダクションから始まり、Pythonの基本文法、演算子、制御構文、標準ライブラリの活用、そしてユーザー定義関数やオブジェクト指向といった高度なトピックまで、全11章にわたって段階的に学習を進める。特に、近年の大規模開発で重要性が増している型ヒントの活用や、構造的パターンマッチング、データクラス、ジェネリクスといった新しい言語機能についても詳細に解説している点が特徴である。本書は、Pythonプログラミングにおける確かな第一歩を提供し、学習者が将来的に直面するであろう技術的課題を乗り越えるための堅固な土台を築くことを目的としている。
1. 本書の目的と構成
1.1. 目的と対象読者
本書は、Pythonに興味を持ち、基礎から体系的に学びたいと考える学習者に向けた入門書である。プログラミングを新たに始める初心者だけでなく、より高度な実践を目指す開発者にとっても、確かな知識を習得するための一冊となることを目指している。特に、インターネット上の情報を断片的に利用するだけでは得られない、言語仕様の深い理解を重視しており、これが実践的なアプリケーション開発で直面する問題への対応力を養うとしている。
1.2. 学習アプローチ
本書は、学習者が着実に知識を定着させられるよう、以下の3ステップ構成を採用している。
- 解説: 各テーマについて、実際のコード例を交えながら詳細に解説する。
- 練習問題: 各節の終わりに設けられ、直前に学習した内容の理解度を確認する。
- この章の理解度チェック: 各章の末尾に配置され、章全体の総合的な理解度を測る。
1.3. 技術仕様とサポート
- 対応バージョン: Python 3.13に対応しており、非同期処理や型ヒントなどの新しい仕様が反映されている。特にPython 3.9から3.13までに追加された新機能についても言及されている。
- 動作確認環境:
- OS: Windows 11, macOS Sequoia 15.1.1
- Pythonディストリビューション: Anaconda 2024.10-1 (Python 3.12.7), Python 3.13
- コードエディター: Visual Studio Code 1.95.1
- サポート教材:
- サンプルファイル: 著者のサポートサイトからダウンロード可能で、章ごとのフォルダー (
/chapXX) や練習問題のサンプル (/practice) が含まれる。 - 解答PDF: 「練習問題」および「この章の理解度チェック」の解答がPDFファイルとして提供される。
- サンプルファイル: 著者のサポートサイトからダウンロード可能で、章ごとのフォルダー (
2. Python言語の特性と開発の現状
2.1. Pythonの言語的特徴
本書では、Pythonを多角的な視点から紹介している。
| 特性分類 | 詳細 |
| 言語水準と実行方式 | 高級言語であり、人間にとって理解しやすい文法を持つ。また、ソースコードを逐次翻訳しながら実行するインタプリター言語であり、トライ&エラーの開発が容易である。 |
| 言語パラダイム | シンプルさと簡易さを重視したスクリプト言語である。予約語が約35個と少なく、初学者にも習得が容易。また、オブジェクト指向を基本としつつ、関数型プログラミング(ラムダ式、ジェネレーター)や構造化プログラミングの要素も取り入れたマルチパラダイム言語である。 |
| ライブラリとエコシステム | 「Battery Included(電池付き)」という思想に基づき、標準で豊富なライブラリが提供される。さらに、サードパーティ製の拡張ライブラリ集積所であるPyPI (Python Package Index)には60万以上のプロジェクトが登録されており、これらを無償で利用可能。特に機械学習、データ分析分野のライブラリ(NumPy, pandas, TensorFlow等)が充実している。 |
「Pythonは『1つのことを表すのに、書き方が1つだけ』であることを意図して設計されています。この思想もまた、Pythonを簡単にしている要因です。」
2.2. Pythonの歴史と開発プロセス
- 歴史: 1991年にGuido van Rossum氏によって発表。2000年のPython 2で普及が進み、2008年に現在のメジャーバージョンであるPython 3がリリースされた。Python 2から3への移行は難航したが、2020年のPython 2系サポート終了により問題は解消され、開発リソースがPython 3に集約されている。
- 近年の動向: 特にPython 3.5で導入された型ヒント(
typingモジュール)の強化が活発であり、大規模開発に対応可能な基盤が整備されている。本書でも第8章以降は型ヒントを前提とした解説が進められる。 - 開発体制:
- 実装: C言語で実装されたCPythonが標準的な実装であり、Pythonソフトウェア財団(PSF)によってオープンソースで管理されている。
- 仕様策定: PEP (Python Enhancement Proposal) と呼ばれる仕様提案の仕組みを通じて、技術仕様や根拠に基づいた合意形成のもとで開発が進められる。
- 主要なPEP: 本書では、特に重要なPEPとして以下を挙げている。
- PEP 8:
Style Guide for Python Code(コーディング規約) - PEP 20:
The Zen of Python(Pythonの設計思想) - PEP 257:
Docstring Conventions(コード内ドキュメントの規約)
- PEP 8:
3. 本書の学習内容とトピック
本書は全11章で構成され、Pythonプログラミングの基礎から応用までを網羅している。
3.1. 基礎編(第1章〜第4章):プログラミングの土台
- イントロダクション(第1章): Pythonの概要、歴史、開発環境の構築(Anaconda, VSCode)、コードの実行方法(対話シェル、ファイル実行)、基本ルール(文字コード、インデント、コメント)、デバッグ、Jupyter Notebookの紹介。
- Pythonの基本(第2章): 変数の宣言と命名規則、動的型付けの概念、主要なデータ型(論理型、整数型、浮動小数点型、文字列型、リスト型)のリテラル表現。
- 演算子(第3章): 算術、代入、比較、論理、ビット演算子を解説。特に代入が参照の引き渡しであること、ミュータブル(変更可能)とイミュータブル(変更不可)の型の違いがもたらす挙動の変化、同一性(
is)と同値性(==)の区別といった重要な概念を詳述。 - 制御構文(第4章): プログラムの基本構造である条件分岐(
if,elif)、繰り返し(while,for, リスト内包表記)、ループ制御(break,continue)、例外処理(try,except)を学ぶ。Python 3.10で導入された構造的パターンマッチング(match...case)についても詳細に解説。
3.2. 中級編(第5章〜第7章):標準ライブラリの活用
- 標準ライブラリ 基本(第5章): ライブラリの分類(組み込み、モジュール)と利用方法(
import)を学んだ後、実用的な文字列操作(検索、分割、置換、整形)および日付・時刻操作(datetimeモジュール)を扱う。 - 標準ライブラリ コレクション(第6章): 複数の値を扱うデータ構造を詳述。
- シーケンス型:
listの高度な操作(メソッド、ソート)、イミュータブルなtuple、効率的なキュー実装のためのcollections.deque。 - セット(集合)型:
setの特性(順序なし、重複なし)と、和集合・積集合などの集合演算。 - 辞書(dict)型: キーと値のペアでデータを管理する方法。
- シーケンス型:
- 標準ライブラリ その他(第7章): 正規表現、ファイル操作、ファイルシステム操作、HTTP通信(
requestsモジュール)など、より実践的なライブラリを学ぶ。
3.3. 応用編(第8章〜第11章):高度なプログラミング
- ユーザー定義関数(第8章): 関数の基本構文、型アノテーション(型ヒント)、スコープ(変数の有効範囲)、様々な引数の記法(可変長引数など)、高階関数、無名関数(ラムダ式)。
- ユーザー定義関数 応用(第9章): デコレーター、ジェネレーター(
yield)、関数のモジュール化、非同期処理(async/await)、ドキュメンテーション(docstring)。 - オブジェクト指向構文(第10章): クラスの定義、インスタンス、メソッド、クラス変数といった基本から、オブジェクト指向の三大要素であるカプセル化、継承、ポリモーフィズムまでを解説。
- オブジェクト指向構文 応用(第11章): 独自の例外クラス作成、特殊メソッド(演算子オーバーロードなど)、データクラス、列挙型(Enum)、ジェネリクス、イテレーター、メタクラスといった、Pythonの強力で柔軟な機能を深く掘り下げる。
「一見して遠回りにも思える言語の確かな理解は、きっと皆さんの血肉となり、つまづいたときに踏みとどまるための力の源泉となるはずです。」 – 本書「はじめに」より
- はじめに
- 第1章 イントロダクション
- 1.1 Pythonとは?
- 1.1.1 マシン語と高級言語
- 1.1.2 コンパイル言語とインタプリター言語
- 1.1.3 スクリプト言語
- 1.1.4 オブジェクト指向言語
- 1.1.5 Pythonのライブラリ
- 1.2 Pythonの歴史と現状
- 1.2.1 Pythonの歴史
- 1.2.2 Python開発の状況
- 1.3 Pythonアプリを開発/実行するための基本環境
- 1.3.1 準備すべきソフトウェア
- 1.3.2 Windows環境の場合
- 1.3.3 macOS環境の場合
- 1.3.4 サンプルの配置
- 1.4 Pythonプログラミングの基本
- 1.4.1 コードの実行方法
- 1.4.2 Pythonシェルによる実行
- 1.4.3 ファイルからコードを実行する
- 1.5 Pythonの基本ルール
- 1.5.1 文字コードの設定
- 1.5.2 文を区切るのは改行
- 1.5.3 指定された値を表示する「print」
- 1.5.4 大文字/小文字を区別する
- 1.5.5 コメントは開発者のための備忘録
- 1.6 開発/学習の前に押さえておきたいテーマ
- 1.6.1 デバッグの基本
- 1.6.2 ブラウザー上で実行できるPython開発環境「Jupyter Notebook」
- この章の理解度チェック
- 1.1 Pythonとは?
- 第2章 Pythonの基本
- 2.1 変数
- 2.1.1 変数の宣言
- 2.1.2 識別子の命名規則
- 2.1.3 よりよい識別子のためのルール
- 2.1.4 変数の破棄
- 2.1.5 定数
- 2.2 データ型
- 2.2.1 データ型の分類
- 2.2.2 論理型(bool)
- 2.2.3 整数型(int)
- 2.2.4 浮動小数点型(float)
- 2.2.5 補足 数値セパレーター
- 2.2.6 複素数型(complex)
- 2.2.7 文字列型(str)
- 2.2.8 リスト(list)
- この章の理解度チェック
- 2.1 変数
- 第3章 演算子
- 3.1 算術演算子
- 3.1.1 データ型によって挙動は変化する
- 3.1.2 文字列と数値との演算
- 3.1.3 除算を表す演算子「/」「//」
- 3.1.4 浮動小数点数の演算には要注意
- 3.2 代入演算子
- 3.2.1 数値のインクリメント/デクリメント
- 3.2.2 「=」演算子による代入は参照の引き渡し
- 3.2.3 ミュータブルとイミュータブル
- 3.2.4 アンパック代入
- 3.2.5 新しい代入演算子「:=」
- 3.3 比較演算子
- 3.3.1 異なる型での比較
- 3.3.2 リストの比較
- 3.3.3 浮動小数点数の比較
- 3.3.4 同一性と同値性
- 3.3.5 条件演算子
- 3.4 論理演算子
- 3.4.1 ショートカット演算(短絡演算)
- 3.4.2 比較演算子の連結
- 3.5 ビット演算子
- 3.5.1 ビット論理演算子
- 3.5.2 ビットシフト演算子
- 3.6 演算子の優先順位と結合則
- 3.6.1 優先順位
- 3.6.2 結合則
- この章の理解度チェック
- 3.1 算術演算子
- 第4章 制御構文
- 4.1 条件分岐
- 4.1.1 if命令──単純分岐
- 4.1.2 if命令──多岐分岐
- 4.1.3 if命令──入れ子構造
- 4.1.4 補足 条件式を指定する場合の注意点
- 4.1.5 match…case命令 Python 3.10
- 4.1.6 さまざまな構造化パターンマッチング Python 3.10
- 4.2 繰り返し処理
- 4.2.1 条件式がTrueの間だけ処理を繰り返す──while命令
- 4.2.2 リストの内容を順に処理する──for命令
- 4.2.3 決められた回数だけ処理を実行する──for命令(range関数)
- 4.2.4 リストから新たなリストを生成する──リスト内包表記
- 4.3 ループの制御
- 4.3.1 ループを中断する──break命令
- 4.3.2 現在の周回をスキップする──continue命令
- 4.3.3 ループでの終了処理を実装する
- 4.3.4 入れ子のループを中断/スキップする
- 4.4 例外処理
- 4.4.1 例外を処理する──try命令
- 4.4.2 例外が発生した場合、しなかった場合の処理を定義する
- この章の理解度チェック
- 4.1 条件分岐
- 第5章 標準ライブラリ 基本
- 5.1 ライブラリの分類
- 5.1.1 関数
- 5.1.2 型
- 5.1.3 組み込み型/関数とモジュール
- 5.2 文字列の操作
- 5.2.1 文字列の長さを取得する
- 5.2.2 文字列を大文字⇔小文字で変換する
- 5.2.3 部分文字列を取得する
- 5.2.4 文字の種類を判定する
- 5.2.5 文字列を検索する
- 5.2.6 文字列の前後から空白を除去する
- 5.2.7 文字列に特定の文字列が含まれるかを判定する
- 5.2.8 文字列を特定の区切り文字で分割する
- 5.2.9 リストを結合する
- 5.2.10 文字列を置き換える
- 5.2.11 文字を整形する
- 5.2.12 str型⇔bytes型を変換する
- 5.3 日付/時刻の操作
- 5.3.1 日付/時刻値を生成する
- 5.3.2 年月日、時分秒などの時刻要素を取得する
- 5.3.3 日付/時刻値を加算/減算する
- 5.3.4 日付/時刻値の差分を求める
- 5.3.5 日付/時刻値を比較する
- 5.3.6 日付/時刻値を整形する
- 5.3.7 カレンダーを生成する
- この章の理解度チェック
- 5.1 ライブラリの分類
- 第6章 標準ライブラリ コレクション
- 6.1 シーケンス型
- 6.1.1 リストの生成
- 6.1.2 リストから特定範囲の要素を取得する──スライス構文
- 6.1.3 リストの要素数を取得する
- 6.1.4 リストに要素を追加/削除する
- 6.1.5 リスト内の要素を削除する
- 6.1.6 複数要素を追加/置換/削除する
- 6.1.7 リストを検索する
- 6.1.8 リストを複製する
- 6.1.9 リストを連結する
- 6.1.10 リストの内容を並べ替える
- 6.1.11 リストをforループで処理する方法
- 6.1.12 リスト内の要素がTrueであるかを判定する
- 6.1.13 リスト内の要素を加工する
- 6.1.14 リストの内容を特定の条件で絞り込む
- 6.1.15 リスト内の要素を順に処理して1つにまとめる
- 6.1.16 キュー構造を実装する
- 6.1.17 イミュータブルなリストを生成する
- 6.2 セット(集合)型
- 6.2.1 セットの生成
- 6.2.2 セットの基本操作
- 6.2.3 要素の有無/包含関係を判定する
- 6.2.4 和集合/差集合/積集合などを求める
- 6.2.5 セット内包表記
- 6.3 辞書(dict)型
- 6.3.1 辞書の生成
- 6.3.2 ハッシュ表とキーの注意点
- 6.3.3 辞書の基本操作
- 6.3.4 既定値を持つ辞書を定義する──defaultdict
- 6.3.5 辞書内包表記
- 6.3.6 辞書型でのパターンマッチング Python 3.10
- この章の理解度チェック
- 6.1 シーケンス型
- 第7章 標準ライブラリ その他
- 7.1 正規表現
- 7.1.1 正規表現の基本
- 7.1.2 文字列が正規表現パターンにマッチしたかを判定する
- 7.1.3 マッチしたすべての文字列を取得する
- 7.1.4 正規表現オプションでマッチング時の挙動を制御する
- 7.1.5 例 正規表現による検索
- 7.1.6 正規表現で文字列を置換する
- 7.1.7 正規表現で文字列を分割する
- 7.2 ファイル操作
- 7.2.1 例 テキストファイルへの書き込み
- 7.2.2 テキストファイルを読み込む
- 7.2.3 バイナリファイルの読み書き
- 7.2.4 タブ区切り形式のテキストを読み書きする
- 7.2.5 オブジェクトのシリアライズ
- 7.3 ファイルシステムの操作
- 7.3.1 フォルダー配下のファイル情報を取得する(1)
- 7.3.2 フォルダー配下のファイル情報を取得する(2)
- 7.3.3 フォルダー/ファイル情報を再帰的に取得する
- 7.3.4 フォルダーを作成/リネーム/削除する
- 7.3.5 フォルダーを作成/リネーム/削除する(複数階層)
- 7.3.6 フォルダー/ファイルをコピーする
- 7.4 HTTP経由でコンテンツを取得する
- 7.4.1 requestsモジュールの基本
- 7.4.2 HTTP POSTによる通信
- 7.4.3 例 JSONデータを取得する
- 7.5 その他の機能
- 7.5.1 数学演算──mathモジュール+組み込み関数
- 7.5.2 乱数を生成する──randomモジュール
- 7.5.3 データ型を変換/判定する──int/float関数など
- 7.5.4 モジュール/クラスに含まれる要素を確認する
- この章の理解度チェック
- コラム きれいなプログラム、書いていますか?──コーディング規約
- コラム Pythonをより深く学ぶための参考書籍/サイト
- 7.1 正規表現
- 第8章 ユーザー定義関数
- 8.1 ユーザー定義関数の基本
- 8.1.1 ユーザー定義関数の基本構文
- 8.1.2 関数名
- 8.1.3 仮引数と実引数
- 8.1.4 戻り値
- 8.2 型アノテーション
- 8.2.1 型アノテーションの基本
- 8.2.2 さまざまな型アノテーション
- 8.3 変数の有効範囲(スコープ)
- 8.3.1 グローバル変数とローカル変数
- 8.3.2 関数内でグローバル変数を利用する──global/nonlocal
- 8.3.3 補足 ブロックレベルのスコープ
- 8.4 引数のさまざまな記法
- 8.4.1 引数の既定値
- 8.4.2 キーワード引数
- 8.4.3 可変長引数の関数
- 8.4.4 可変長引数(キーワード引数)
- 8.4.5 「*」「**」による引数の展開
- 8.5 関数呼び出しと戻り値
- 8.5.1 複数の戻り値
- 8.5.2 再帰関数
- 8.5.3 高階関数
- 8.5.4 無名関数(ラムダ式)
- 8.5.5 関数のオーバーロード
- 8.5.6 補足 型ガード Python 3.13
- この章の理解度チェック
- コラム Pythonプログラマーの心構え – The Zen of Python
- 8.1 ユーザー定義関数の基本
- 第9章 ユーザー定義関数 応用
- 9.1 デコレーター
- 9.1.1 デコレーターを利用しない例
- 9.1.2 デコレーターの基本
- 9.1.3 標準デコレーターの例
- 9.1.4 引数を受け取るデコレーター
- 9.1.5 クロージャー(関数閉方)
- 9.2 ジェネレーター
- 9.2.1 yield 命令
- 9.2.2 例 素数を求めるジェネレーター
- 9.2.3 ジェネレーターの主なメソッド
- 9.2.4 一部の処理を他のジェネレーターに委譲する
- 9.2.5 ジェネレーター式
- 9.3 関数のモジュール化
- 9.3.1 モジュールの定義
- 9.3.2 モジュールをインポートする
- 9.3.3 モジュールの検索先
- 9.3.4 補足 インポート時の作法
- 9.3.5 パッケージ
- 9.4 非同期処理
- 9.4.1 コルーチンの基本
- 9.4.2 複数の非同期処理を実行する
- 9.4.3 非awaitableな処理をawait 式に渡す
- 9.5 ドキュメンテーション
- 9.5.1 docstringの基本
- 9.5.2 ドキュメント生成ツール「Sphinx」
- 9.5.3 注意 デコレーターにおけるdocstring
- この章の理解度チェック
- 9.1 デコレーター
- 第10章 オブジェクト指向構文
- 10.1 クラスの定義
- 10.1.1 最も簡単なクラス
- 10.1.2 インスタンス変数
- 10.1.3 メソッド
- 10.1.4 クラスメソッド
- 10.1.5 staticメソッド
- 10.1.6 クラス変数
- 10.1.7 クラス変数/インスタンス変数の型アノテーション
- 10.2 カプセル化
- 10.2.1 カプセル化とは?
- 10.2.2 インスタンス変数の隠蔽
- 10.2.3 アクセサーメソッド
- 10.2.4 プロパティ
- 10.3 継承
- 10.3.1 継承の基本
- 10.3.2 メソッドのオーバーライド
- 10.3.3 superによる基底クラスの参照
- 10.3.4 継承に関わるデコレーター
- 10.3.5 多重継承とメソッドの検索順序
- 10.3.6 委譲
- 10.3.7 ミックスイン
- 10.3.8 パターンマッチング(クラスパターン) Python 3.10
- 10.4 ポリモーフィズム
- 10.4.1 ポリモーフィズムの基本
- 10.4.2 抽象メソッド
- 10.4.3 ダックタイピング──Protocol
- この章の理解度チェック
- コラム モジュール/クラス/関数の特殊属性
- コラム 外部ライブラリのインストール
- 10.1 クラスの定義
- 第11章 オブジェクト指向構文 応用
- 11.1 例外処理
- 11.1.1 例外クラスの型
- 11.1.2 終了処理を定義する──finally 節
- 11.1.3 例外をスローする──raise命令
- 11.1.4 独自の例外クラス
- 11.1.5 例外グループ Python 3.11
- 11.2 特殊メソッド
- 11.2.1 オブジェクトの文字列表現を取得する
- 11.2.2 オブジェクト同士が等しいかどうかを判定する
- 11.2.3 オブジェクトのハッシュ値を取得する
- 11.2.4 オブジェクトを四則演算する
- 11.2.5 オブジェクト同士を比較する
- 11.2.6 データ型を変換する
- 11.2.7 オブジェクトの真偽を判定する
- 11.2.8 属性の取得/設定の挙動をカスタマイズする
- 11.2.9 ディスクリプター
- 11.2.10 インスタンスを関数的に呼び出す
- 11.3 データクラス
- 11.3.1 データクラスの基本
- 11.3.2 フィールドのカスタマイズ
- 11.3.3 イミュータブルなクラス
- 11.3.4 hashableなクラスを生成する
- 11.3.5 データクラスの予約関数
- 11.3.6 型付きの辞書を定義する──TypedDict
- 11.4 列挙型(Enum)
- 11.4.1 列挙型の基本
- 11.4.2 列挙型の基本機能
- 11.4.3 列挙型のさまざまな定義方法
- 11.4.4 ビットフィールドによるフラグ管理
- 11.5 ジェネリクス Python 3.12
- 11.5.1 ジェネリック型の基本
- 11.5.2 型変数の制約条件
- 11.5.3 ジェネリック関数
- 11.5.4 例 デコレーターへの型ヒント
- 11.6 イテレーター
- 11.6.1 自作クラスでイテレーターを実装する
- 11.6.2 例 素数を求めるイテレーター
- 11.6.3 コンテナー型で利用できる特殊メソッド
- 11.7 メタクラス
- 11.7.1 type関数とclass命令
- 11.7.2 メタクラスの基本
- 11.7.3 例 シングルトンパターン
- 11.7.4 クラスデコレーター
- この章の理解度チェック
- コラム よく見かけるエラーとその対処法
- 11.1 例外処理
- 検索キーワード