Python実践入門 ──言語の力を引き出し、開発効率を高める
![[表紙]Python実践入門 ──言語の力を引き出し、開発効率を高める [表紙]Python実践入門 ──言語の力を引き出し、開発効率を高める](/assets/images/cover/2020/9784297111113.jpg)
2020年1月24日発売
陶山嶺 著
A5判/368ージ
定価(本体2,980円+税)
ISBN 978-4-297-11111-3
この本の概要
Pythonはここ数年で日本語の書籍も増え,開発現場での利用実績も着実に増えてきています。ご自身の第二,第三の言語の選択肢としてPythonが気になっているという方も多いのではないでしょうか。また,「Pythonを始めてみたけど,実際に業務で利用するには不安が残る」「コードレビューに怯えながらPythonを書いている」という方も多いのではないでしょうか。
本書は,そういった方を対象に,Pythonという言語が持つ機能の実践的な使い方を紹介します。Pythonは,日常的なツールからWeb開発,データ分析,機械学習など分野を問わず利用できる汎用性の高い言語です。本書も同じく,Pythonという言語の仕様やその特徴的な機能,標準ライブラリでできることを中心に扱うため,分野を問わず活用していただけます。
こんな方におすすめ
- プログラミングの心得はあるが、Pythonの経験はない方
- Pythonの実践的な書き方を知りたい方
本書のサンプル
本書の一部ページを,PDFで確認することができます。
本書の紙面イメージは次のとおりです。画像をクリックすることで拡大して確認することができます。
第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