WEB+DB PRESS plusシリーズPython実践入門
──言語の力を引き出し、開発効率を高める

書籍の概要

この本の概要

Pythonはここ数年で日本語の書籍も増え,開発現場での利用実績も着実に増えてきています。ご自身の第二,第三の言語の選択肢としてPythonが気になっているという方も多いのではないでしょうか。また,「Pythonを始めてみたけど,実際に業務で利用するには不安が残る」「コードレビューに怯えながらPythonを書いている」という方も多いのではないでしょうか。
本書は,そういった方を対象に,Pythonという言語が持つ機能の実践的な使い方を紹介します。Pythonは,日常的なツールからWeb開発,データ分析,機械学習など分野を問わず利用できる汎用性の高い言語です。本書も同じく,Pythonという言語の仕様やその特徴的な機能,標準ライブラリでできることを中心に扱うため,分野を問わず活用していただけます。

こんな方におすすめ

  • プログラミングの心得はあるが,Pythonの経験はない方
  • Pythonの実践的な書き方を知りたい方

この書籍に関連する記事があります!

はじめに
本書は,これからPythonを始めようとしているプログラミング経験者に最適なPython入門書です。

本書のサンプル

本書の一部ページを,PDFで確認することができます。

本書の紙面イメージは次のとおりです。画像をクリックすることで拡大して確認することができます。

サンプル画像1

サンプル画像2

サンプル画像3

サンプル画像4

目次

第1章 Pythonはどのような言語か

  • 1.1 プログラミング言語としての特徴
    • シンプルで読みやすい動的型付き言語
      • インデントによるブロックの表現
      • 教育用プログラミング言語ABCの影響
    • 後方互換性の重視
    • 豊富な標準ライブラリ
    • さまざまな用途での利用
  • 1.2 Pythonの歴史と現況
    • Python自体の進化
      • Pythonの誕生
      • Python 2系でメジャーな言語に
      • Python 3系への移行
      • 現在の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 ── ドキュメントの書き方
  • 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文でよく使うオブジェクトの比較
  • 3.3 ループ ── 処理の繰り返し
    • for文 ── 要素の数だけ処理を繰り返す
      • for文でよく使う組み込み関数
      • for文のelse節の挙動
      • for文での変数のスコープ
    • while文 ── 条件を指定した処理の繰り返し
      • while文のelse節の挙動
    • break文 ── ループを抜ける
    • continue文 ── 次のループに移る
  • 3.4 例外処理
    • try文 ── 例外の捕捉
      • except節 ── 例外が発生したときのみ実行する
      • else節 ── 例外が発生しなかったときのみ実行する
      • finally節 ── 例外の有無にかかわらず必ず実行する
    • raise文 ── 意図的に例外を発生させる
    • 独自の例外を定義する
    • with文 ── 定義済みのクリーンアップ処理を必ず実行する
  • 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文での配列の挙動
    • 条件式で使える配列の性質
    • タプルとリストの使い分け
  • 4.6 辞書 ── キーと値のセットを扱う
    • dict型 ── 辞書を扱う型
    • 要素の追加と削除
    • キーによる要素へのアクセス
    • キーに使えるオブジェクトの条件
    • for文での辞書の挙動
    • 条件式で使える辞書の性質
  • 4.7 集合 ── 一意な要素の集合を扱う
    • set型 ── 可変な集合を扱う型
      • 要素の追加と削除
    • frozenset型 ── 不変な集合を扱う型
    • 集合の演算 ── 和,積,差,対称差
    • for文での集合の挙動
    • 条件式で使える集合の性質
  • 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コマンド
      • 仮想環境内でパッケージを利用する
      • 複数のプロジェクトを並行して開発する
  • 11.2 パッケージの利用
    • pip ── パッケージ管理ツール
      • 基本的な使い方
      • パッケージのインストール
      • パッケージのアンインストール
      • PyPI ── Pythonパッケージのリポジトリ
      • ソースコードリポジトリにあるパッケージをインストールする
      • ローカルにあるパッケージをインストールする
      • インストール済みのパッケージをアップデートする
      • 現在のユーザー用にインストールする
    • 環境の保存と再現 ── requirementsファイルの活用
      • 現在の環境の情報をrequirementsファイルに保存する
      • requirementsファイルから環境を再現する
      • 開発環境でのみ利用するパッケージの管理
      • 依存パッケージのアップデート
  • 11.3 パッケージの作成
    • setup.py ── パッケージの情報をまとめたファイル
      • パッケージのディレクトリ構成
      • setup.pyの基本
      • PyPIへの登録を考慮する
      • 依存パッケージを考慮する
      • .py以外のファイルを考慮する
    • PyPIへのパッケージの登録
      • PyPIのアカウント作成
      • 配布物の作成
      • 配布物のアップロード
  • 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パッケージの作成
      • テストコードの作成
  • 13.3 継続的インテグレーションの導入
    • CircleCIでテスト自動化
      • プロジェクトの追加
      • config.ymlの追加
    • テストの実行と結果の確認
  • 13.4 アプリケーションの開発
    • コマンドライン引数の取得
      • 画像のソース情報とメッセージを受け取る
      • テストコードの修正
    • 画像の取得
      • ファイルパスから画像を取得するクラスの実装
      • URLから画像を取得するクラスの実装
      • 検索キーワードから画像を取得するクラスの実装
      • 画像を取得するクラスの利用
    • 画像処理
      • 文字列を画像上に描画する最小限の実装例
      • 文字列を中央に最適なサイズで描画する
    • 各処理の呼び出し
  • 13.5 コマンドとして実行する
    • setup.pyの作成
      • entry_points ── スクリプトインタフェースの登録を行う引数
    • 動かしてみよう
  • 13.6 本章のまとめ

著者プロフィール

陶山嶺(すやまれい)

大分県出身。広島大学大学院情報工学専攻修士課程修了。
学生時代にPythonと出会い,言語・コミュニティの持つ思想や雰囲気に惹かれる。
技術的な基礎知識からコミュニティとの付き合い方まで,さまざまなことをPythonを通して学んだ。
PyCon JP 2015へ一般参加したことをきっかけに,PyCon JP 2016からはスタッフやスピーカーとしても参加している。
就職を機に上京していたが,現在は瀬戸内海に浮かぶ広島県尾道市の向島でフルリモートワークを実践中。

Twitter:@rhoboro
GitHub:https://github.com/rhoboro
URL:https://www.rhoboro.com