WEB+DB PRESS plus Python実践入門 ──言語の力を引き出し、開発効率を高める
- 陶山嶺 著
 - 定価
 - 3,278円(本体2,980円+税10%)
 - 発売日
 - 2020.1.24
 - 判型
 - A5
 - 頁数
 - 368ページ
 - ISBN
 - 978-4-297-11111-3 978-4-297-11112-0
 
概要
Pythonはここ数年で日本語の書籍も増え、開発現場での利用実績も着実に増えてきています。ご自身の第二、第三の言語の選択肢としてPythonが気になっているという方も多いのではないでしょうか。また、「Pythonを始めてみたけど、実際に業務で利用するには不安が残る」「コードレビューに怯えながらPythonを書いている」という方も多いのではないでしょうか。
本書は、そういった方を対象に、Pythonという言語が持つ機能の実践的な使い方を紹介します。Pythonは、日常的なツールからWeb開発、データ分析、機械学習など分野を問わず利用できる汎用性の高い言語です。本書も同じく、Pythonという言語の仕様やその特徴的な機能、標準ライブラリでできることを中心に扱うため、分野を問わず活用していただけます。
こんな方にオススメ
- プログラミングの心得はあるが、Pythonの経験はない方
 - Pythonの実践的な書き方を知りたい方
 
目次
第1章 Pythonはどのような言語か
- 1.1 プログラミング言語としての特徴
- シンプルで読みやすい動的型付き言語
- インデントによるブロックの表現
 - 教育用プログラミング言語ABCの影響
 
 - 後方互換性の重視
 - 豊富な標準ライブラリ
 - さまざまな用途での利用
 
 - シンプルで読みやすい動的型付き言語
 - 1.2 Pythonの歴史と現況
- Python自体の進化
- Pythonの誕生
 - Python 2系でメジャーな言語に
 - Python 3系への移行
 - 現在のPythonの状況
 
 - Pythonを取り巻く環境の変化
 
 - Python自体の進化
 - 1.3 Pythonコミュニティの特徴
- コミュニティ主体のOSS
- PyCon ── Pythonユーザーが集まるカンファレンス
 
 - PEPの存在
- PEP 8:Style Guide for Python Code ── Python標準のスタイルガイド
 - PEP 20:The Zen of Python ── Pythonの設計ガイドライン
 - PEP 257:Docstring Conventions ── ドキュメントの書き方
 
 
 - コミュニティ主体のOSS
 - 1.4 本章のまとめ
 
第2章 Pythonのインストールと開発者向けの便利な機能
- 2.1 Pythonのインストール
- OSにプリインストールされているPython
 - macOSでの利用
- 公式インストーラを利用したインストール
 
 - Windowsでの利用
- 公式インストーラを利用したインストール
 
 - Ubuntuでの利用
- APTを利用したインストール
 - そのほかのLinuxでの利用
 
 - Dockerの利用
- 公式イメージを利用したPythonの実行
 - スクリプトファイルの実行
 
 
 - 2.2 Pythonの実行
- 本書で利用するpythonコマンド
 
- Pythonインタプリタの2つのモード
 - 対話モードのインタプリタ
 - 対話モードの基本的な使い方
 - 対話モードでよく使う組み込み関数
- type() ── オブジェクトの型を調べる
 - dir() ── オブジェクトの属性を調べる
 - help() ── ヘルプページを表示する
 - Docstringを使ったヘルプページの作成
 
 - スクリプトの実行
- モジュールをスクリプトとして実行
 
 - pythonコマンドとpython3コマンドの違い
 
 - 2.3 本章のまとめ
 
第3章 制御フロー
- 3.1 基本となる文法
- インデントによるブロックの表現
- インデントの幅
 - pass文 ── 何もしないことの宣言
 
 - 変数の利用
- 型の宣言がいらない理由
 
 - コメント
- コメントとDocstringの違い
 
 
 - インデントによるブロックの表現
 - 3.2 条件分岐
- if文 ── 条件を指定した処理の分岐
- 真となる値、偽となる値
 - シンプルな条件式
 - if文でよく使う数値の比較
 - if文でよく使うオブジェクトの比較
 
 
 - if文 ── 条件を指定した処理の分岐
 - 3.3 ループ ── 処理の繰り返し
- for文 ── 要素の数だけ処理を繰り返す
- for文でよく使う組み込み関数
 - for文のelse節の挙動
 - for文での変数のスコープ
 
 - while文 ── 条件を指定した処理の繰り返し
- while文のelse節の挙動
 
 - break文 ── ループを抜ける
 - continue文 ── 次のループに移る
 
 - for文 ── 要素の数だけ処理を繰り返す
 - 3.4 例外処理
- try文 ── 例外の捕捉
- except節 ── 例外が発生したときのみ実行する
 - else節 ── 例外が発生しなかったときのみ実行する
 - finally節 ── 例外の有無にかかわらず必ず実行する
 
 - raise文 ── 意図的に例外を発生させる
 - 独自の例外を定義する
 - with文 ── 定義済みのクリーンアップ処理を必ず実行する
 
 - try文 ── 例外の捕捉
 - 3.5 本章のまとめ
 
第4章 データ構造
- 4.1 None ── 値が存在しないことを表現する
- 条件式でのNoneの利用
 
 - 4.2 真理値 ── 真/偽を扱う
- bool型 ── 真理値を扱う型
 - ブール演算
- x or y ── xが真ならx、そうでなければyを返す
 - x and y ── xが真ならy、そうでなければxを返す
 - not x ── xが真ならFalse、そうでなければTrueを返す
 
 
 - 4.3 数値
- 数値どうしの演算
 - 数値を扱う組み込み型
- int型 ── 整数を扱う型
 - float型 ── 浮動小数点数を扱う型
 - complex型 ── 複素数を扱う型
 
 - 条件式での数値の利用
 
 - 4.4 文字列
- str型 ── 文字列を扱う型
 - 文字列の演算
 - for文での文字列の挙動
 - 条件式での文字列の利用
 - 文字列内での変数の利用
- f-string ── 式を埋め込める文字列リテラル
 - format() ── 引数に渡した変数で文字列を置換するメソッド
 - %演算子 ── 一番古い文字列フォーマット
 
 - str型とよく似たbytes型
- str.encode()とbytes.decode()を利用した相互変換
 - Python 2系とPython 3系の文字列の違い
 
 
 - 4.5 配列 ── 要素を1列に並べて扱う
- list型 ── 可変な配列を扱う型
- 要素の追加と削除
 - インデックスによる要素へのアクセス
 - スライスによるリストの切り出し
 
 - tuple型 ── 不変な配列を扱う型
- タプル作成時の注意点
 - インデックスによる要素へのアクセス
 - スライスによるタプルの切り出し
 
 - for文での配列の挙動
 - 条件式で使える配列の性質
 - タプルとリストの使い分け
 
 - list型 ── 可変な配列を扱う型
 - 4.6 辞書 ── キーと値のセットを扱う
- dict型 ── 辞書を扱う型
 - 要素の追加と削除
 - キーによる要素へのアクセス
 - キーに使えるオブジェクトの条件
 - for文での辞書の挙動
 - 条件式で使える辞書の性質
 
 - 4.7 集合 ── 一意な要素の集合を扱う
- set型 ── 可変な集合を扱う型
- 要素の追加と削除
 
 - frozenset型 ── 不変な集合を扱う型
 - 集合の演算 ── 和、積、差、対称差
 - for文での集合の挙動
 - 条件式で使える集合の性質
 
 - set型 ── 可変な集合を扱う型
 - 4.8 内包表記 ── 効率的なシーケンスの生成
- リスト内包表記 ── 効率的なリストの生成
- ネストしたリストの内包表記
 - if文のある内包表記
 
 - そのほかの内包表記
 
 - リスト内包表記 ── 効率的なリストの生成
 - 4.9 そのほかの型を表す概念
- 可変オブジェクト ── 定義後に値を変更できるオブジェクト
 - 不変オブジェクト ── 定義後に値を変更できないオブジェクト
 - コンテナオブジェクト ── ほかのオブジェクトへの参照を持つオブジェクト
 - イテラブルなオブジェクト ── for文で使えるオブジェクト
 - 呼び出し可能オブジェクト ── ()を付けて呼び出せるオブジェクト
 
 - 4.10 本章のまとめ
 
第5章 関数
- 5.1 関数 ── 関連する処理をまとめる
- 関数の定義と実行
 - 引数を取る関数
 - 関数はオブジェクト
 - 関数の戻り値
- returnがない場合の戻り値
 
 - 関数のさまざまな引数
- 位置引数 ── 仮引数名を指定しない実引数の受け渡し
 - キーワード引数 ── 仮引数名を指定した実引数の受け渡し
 - デフォルト値のある引数 ── 実引数を省略できる仮引数
 - 可変長の位置引数
 - 可変長のキーワード引数
 - キーワードのみ引数 ── 呼び出し時に仮引数名が必須になる引数
 - 位置のみ引数 ── 呼び出し時に仮引数名を指定できない引数
 
 - 引数リストのアンパック ── リストや辞書に格納された値を引数に渡す
 - 関数のDocstring
 
 - 5.2 lambda式 ── 無名関数の作成
- lambda式の定義と実行
 - lambda式の使いどころ
 
 - 5.3 型ヒント ── アノテーションで関数に型情報を付与する
- 型情報を付与するのメリット
 - 型情報の付与
- 変数への型情報の付与
 
 - 型ヒントの活用例 ── 静的解析ツールの利用
 
 - 5.4 本章のまとめ
 
第6章 クラスとインスタンス
- 6.1 Pythonのクラス機構
- classキーワードによるクラスの定義
 - インスタンスの作成
 
 - 6.2 インスタンス ── クラスをもとに生成されるオブジェクト
- インスタンスメソッド ── インスタンスに紐付くメソッド
 - インスタンス変数 ── インスタンスが保持する変数
 - インスタンスの初期化
- __init__() ── インスタンスの初期化を行う特殊メソッド
 - 引数を渡してインスタンス化する
 - __init__()と__new__()の違い ── イニシャライザとコンストラクタ
 - __new__()の注意点
 
 - プロパティ ── インスタンスメソッドをインスタンス変数のように扱う
- property ── 値の取得時に呼び出されるメソッド
 - setter ── 値の設定時に呼び出されるメソッド
 
 - クラスやインスタンスのプライベートな属性
- アンダースコアから始まる属性
 - アンダースコア2つから始まる属性
 - プライベートな属性に対するPythonコミュニティの考え方
 
 
 - 6.3 クラス ── インスタンスのひな型となるオブジェクト
- クラス変数 ── クラスオブジェクトが保持する変数
- クラス変数にはインスタンスからも参照可能
 
 - クラスメソッド ── クラスに紐付くメソッド
 - スタティックメソッド ── 関数のように振る舞うメソッド
 
 - クラス変数 ── クラスオブジェクトが保持する変数
 - 6.4 クラスの継承
- メソッドのオーバーライドとsuper()による基底クラスへのアクセス
 - すべてのオブジェクトはobjectクラスのサブクラス
 - 多重継承 ── 複数の基底クラスを指定する
- 多重継承の注意点
 - 属性__mro__を利用したメソッド解決順序の確認
 
 
 - 6.5 本章のまとめ
 
第7章 モジュールとパッケージ、名前空間とスコープ
- 7.1 モジュール ── コードを記述した.pyファイル
- モジュールの作成
 - モジュールのインポート
 - python3コマンドから直接実行する
- 引数を取得する
 - 直接実行したときのみ動くコード
 - if __name__ == '__main__':ブロックの意味
 - 変数__name__に格納される値
 
 
 - 7.2 パッケージ ── モジュールの集合
- パッケージの作成
 - パッケージ内のモジュールのインポート
- __init__.py ── パッケージの初期化を行う
 - __init__.pyの便利な使い方
 
 - import文の比較
- import文のみを利用したインポート
 - from節を利用して特定の属性をインポートする
 - .を利用した相対インポート
 - ワイルドカードを利用して複数の属性を一括インポートする
 - as節による別名の付与
 
 
 - 7.3 インポートのしくみ
- モジュール検索の流れ
 - sys.path ── モジュールの検索パス
- 検索パスの優先度
 
 - PYTHONPATH ── sys.pathに検索パスを追加する
 
 - 7.4 名前空間と変数のスコープ
- 名前空間 ── 名前とオブジェクトのマッピング
- 名前空間の活用
 
 - スコープ ── 直接アクセス可能な領域
- ローカルスコープ ── 関数内に閉じたスコープ
 - グローバルスコープ ── モジュールトップレベルのスコープ
 - ビルトインスコープ ── 組み込みオブジェクトのスコープ
 - エンクロージングスコープ ── 現在のローカルスコープの1つ外側のスコープ
 
 
 - 名前空間 ── 名前とオブジェクトのマッピング
 - 7.5 本章のまとめ
 
第8章 組み込み関数と特殊メソッド
- 8.1 組み込み関数 ── いつでも利用できる関数
- オブジェクトの型を調べる関数
- isinstance()、issubclass() ── 動的な型判定
 - callable() ── 呼び出し可能オブジェクトを判定
 
 - オブジェクトの属性に関する関数
- hasattr() ── オブジェクトの属性の有無を判定
 - getattr()、setattr()、delattr() ── オブジェクトの属性を操作する
 
 - イテラブルなオブジェクトを受け取る関数
- zip() ── 複数のイテラブルの要素を同時に返す
 - sorted() ── イテラブルの要素を並べ替える
 - filter() ── イテラブルの要素を絞り込む
 - map() ── すべての要素に関数を適用する
 - all()、any() ── 真理値を返す
 
 - そのほかの組み込み関数
 
 - オブジェクトの型を調べる関数
 - 8.2 特殊メソッド ── Pythonが暗黙的に呼び出す特別なメソッド
- __str__()、__repr__() ── オブジェクトを文字列で表現する
 - __bool__() ── オブジェクトを真理値で評価する
 - __call__() ── インスタンスを関数のように扱う
 - 属性への動的なアクセス
- __setattr__() ── 属性への代入で呼び出される
 - __delattr__() ── 属性の削除で呼び出される
 - __getattr__()、__getattribute__() ── 属性アクセスで呼び出される
 
 - イテラブルなオブジェクトとして振る舞う
- __iter__() ── イテレータオブジェクトを返す
 - __next__() ── 次の要素を返す
 
 - コンテナオブジェクトとして振る舞う
- __getitem__()、__setitem__() ── インデックスやキーによる操作
 - __contains__() ── オブジェクトの有無を判定する
 
 - そのほかの特殊メソッド
 
 - 8.3 本章のまとめ
 
第9章 Python特有のさまざまな機能
- 9.1 ジェネレータ ── メモリ効率のよいイテラブルなオブジェクト
- ジェネレータの具体例
 - ジェネレータの実装
- ジェネレータ関数 ── 関数のように作成する
 - ジェネレータ式 ── 内包表記を利用して作成する
 - yield from式 ── サブジェネレータへ処理を委譲する
 
 - ジェネレータを利用する際の注意点
- len()で利用する場合
 - 複数回利用する場合
 
 - ジェネレータの実例 ── ファイルの内容を変換する
 - そのほかのユースケース
 
 - 9.2 デコレータ ── 関数やクラスの前後に処理を追加する
- デコレータの具体例
- functools.lru_cache() ── 関数の結果をキャッシュする関数デコレータ
 - dataclasses.dataclass() ── よくある処理を自動追加するクラスデコレータ
 
 - デコレータの実装
- シンプルなデコレータ
 - 引数を受け取る関数のデコレータ
 - デコレータ自身が引数を受け取るデコレータ
 - 複数のデコレータを同時に利用する
 - functools.wraps()でデコレータの欠点を解消する
 
 - デコレータの実例 ── 処理時間の計測
 - そのほかのユースケース
 
 - デコレータの具体例
 - 9.3 コンテキストマネージャー ── with文の前後で処理を実行するオブジェクト
- コンテキストマネージャーの具体例
 - コンテキストマネージャーの実装
- __enter__()、__exit__() ── with文の前後に呼ばれるメソッド
 - with文と例外処理
 - asキーワード ── __enter__()の戻り値を利用する
 - contextlib.contextmanagerでシンプルに実装する
 
 - コンテキストマネージャーの実例 ── 一時的なログレベルの変更
 - そのほかのユースケース
 
 - 9.4 デスクリプタ ── 属性処理をクラスに委譲する
- デスクリプタの具体例
 - デスクリプタの実装
- __set__()を実装する ── データデスクリプタ
 - __get__()のみを実装する ── 非データデスクリプタ
 
 - デスクリプタの実例 ── プロパティのキャッシュ
 - そのほかのユースケース
 
 - 9.5 本章のまとめ
 
第10章 並行処理
- 10.1 並行処理と並列処理 ── 複数の処理を同時に行う
- 逐次処理で実行する
 - 並行処理で実行する
 - 並列処理で実行する
 - Pythonと並行処理
- 並行処理と非同期処理の関係
 
 
 - 10.2 concurrent.futuresモジュール ── 並行処理のための高水準インタフェース
- FutureクラスとExecutorクラス ── 非同期処理のカプセル化と実行
 - ThreadPoolExecutorクラス ── スレッドベースの非同期実行
- スレッドベースの非同期実行が効果的なケース
 
 - ThreadPoolExecutorクラスを利用したマルチスレッド処理の実例
- 逐次処理で実装
 - マルチスレッドで実装
 - マルチスレッドの注意点
 - マルチスレッドでの動作に問題がある実装
 - スレッドセーフな実装
 
 - ProcessPoolExecutorクラス ── プロセスベースの非同期実行
- プロセスベースの非同期実行が効果的なケース
 
 - ProcessPoolExecutorクラスを利用したマルチプロセス処理の実例
- 逐次処理で実装
 - マルチプロセスで実装
 - マルチプロセスの注意点
 - pickle化できるオブジェクトを使う
 - 乱数の取り扱い方
 
 
 - 10.3 asyncioモジュール ── イベントループを利用した並行処理を行う
- コルーチン ── 処理の途中で中断、再開する
- async構文を使ったコルーチンの実装
 - await構文を使ったコルーチンの呼び出しと中断
 - コルーチンの並行実行
 
 - コルーチンのスケジューリングと実行
- イベントループ ── asyncioモジュールの中心的な機構
 - タスク ── スケジューリングしたコルーチンをカプセル化
 - 非同期I/O ── イベントループに適したI/O処理
 - 同期I/Oを利用する処理のタスク化
 
 - asyncioモジュールとHTTP通信
- aiohttp ── 非同期I/Oを利用するHTTPクライアント兼サーバライブラリ
 
 
 - コルーチン ── 処理の途中で中断、再開する
 - 10.4 本章のまとめ
 
第11章 開発環境とパッケージの管理
- 11.1 仮想環境 ── 隔離されたPython実行環境
- venv ── 仮想環境作成ツール
- venvのしくみ
 - 仮想環境の有効化、無効化
 - 仮想環境内でのpythonコマンド
 - 仮想環境内でパッケージを利用する
 - 複数のプロジェクトを並行して開発する
 
 
 - venv ── 仮想環境作成ツール
 - 11.2 パッケージの利用
- pip ── パッケージ管理ツール
- 基本的な使い方
 - パッケージのインストール
 - パッケージのアンインストール
 - PyPI ── Pythonパッケージのリポジトリ
 - ソースコードリポジトリにあるパッケージをインストールする
 - ローカルにあるパッケージをインストールする
 - インストール済みのパッケージをアップデートする
 - 現在のユーザー用にインストールする
 
 - 環境の保存と再現 ── requirementsファイルの活用
- 現在の環境の情報をrequirementsファイルに保存する
 - requirementsファイルから環境を再現する
 - 開発環境でのみ利用するパッケージの管理
 - 依存パッケージのアップデート
 
 
 - pip ── パッケージ管理ツール
 - 11.3 パッケージの作成
- setup.py ── パッケージの情報をまとめたファイル
- パッケージのディレクトリ構成
 - setup.pyの基本
 - PyPIへの登録を考慮する
 - 依存パッケージを考慮する
 - .py以外のファイルを考慮する
 
 - PyPIへのパッケージの登録
- PyPIのアカウント作成
 - 配布物の作成
 - 配布物のアップロード
 
 
 - setup.py ── パッケージの情報をまとめたファイル
 - 11.4 本章のまとめ
 
第12章 ユニットテスト
- 12.1 ユニットテストの導入
- 単一モジュールのテスト
- テスト実行コマンドの簡略化
 
 - パッケージのテスト
- ディレクトリ構成
 - サンプルアプリケーションの作成
 
 
 - 単一モジュールのテスト
 - 12.2 unittestモジュール ── 標準のユニットテストライブラリ
- テストケースの実装
- 前処理、後処理が必要なテストケース
 
 - テストの実行と結果の確認
- テスト失敗時の結果
 - テスト失敗時の結果を抑制する
 
 - 特定のテストのみを実行する
- テストケースを直接指定
 - テストディスカバリ
 
 
 - テストケースの実装
 - 12.3 unittest.mockモジュール ── モックオブジェクトの利用
- モックオブジェクトの基本的な使い方
- 任意の値を返す呼び出し可能オブジェクトとして利用する
 - アサーションメソッドで呼び出され方をテストする
 
 - patchを使ったオブジェクトの置き換え
 - mockを利用するテストケースの実例
 
 - モックオブジェクトの基本的な使い方
 - 12.4 ユースケース別のテストケースの実装
- 環境依存のテストをスキップする
 - 例外の発生をテストする
 - 違うパラメータで同じテストを繰り返す
 - コンテキストマネージャーをテストする
 
 - 12.5 本章のまとめ
 
第13章 実践的なPythonアプリケーションの開発
- 13.1 作成するアプリケーション
- LGTM画像を自動生成するコマンドラインツール
 - 利用する主な外部パッケージ
- requests ── HTTPクライアントライブラリ
 - Click ── コマンドラインツール作成ライブラリ
 - Pillow ── 画像処理ライブラリ
 
 
 - 13.2 プロジェクトの作成
- Gitの利用
- .gitignoreファイルの作成
 - GitHubでのソースコード管理
 
 - パッケージのひな型作成
- lgtmパッケージの作成
 - テストコードの作成
 
 
 - Gitの利用
 - 13.3 継続的インテグレーションの導入
- CircleCIでテスト自動化
- プロジェクトの追加
 - config.ymlの追加
 
 - テストの実行と結果の確認
 
 - CircleCIでテスト自動化
 - 13.4 アプリケーションの開発
- コマンドライン引数の取得
- 画像のソース情報とメッセージを受け取る
 - テストコードの修正
 
 - 画像の取得
- ファイルパスから画像を取得するクラスの実装
 - URLから画像を取得するクラスの実装
 - 検索キーワードから画像を取得するクラスの実装
 - 画像を取得するクラスの利用
 
 - 画像処理
- 文字列を画像上に描画する最小限の実装例
 - 文字列を中央に最適なサイズで描画する
 
 - 各処理の呼び出し
 
 - コマンドライン引数の取得
 - 13.5 コマンドとして実行する
- setup.pyの作成
- entry_points ── スクリプトインタフェースの登録を行う引数
 
 - 動かしてみよう
 
 - setup.pyの作成
 - 13.6 本章のまとめ
 
プロフィール
陶山嶺
大分県出身。広島大学大学院情報工学専攻修士課程修了。
学生時代にPythonと出会い、言語・コミュニティの持つ思想や雰囲気に惹かれる。
技術的な基礎知識からコミュニティとの付き合い方まで、さまざまなことをPythonを通して学んだ。
PyCon JP 2015へ一般参加したことをきっかけに、PyCon JP 2016からはスタッフやスピーカーとしても参加している。
就職を機に上京していたが、現在は瀬戸内海に浮かぶ広島県尾道市の向島でフルリモートワークを実践中。
Twitter:@rhoboro
GitHub:https://github.com/rhoboro
URL:https://www.rhoboro.com