WEB+DB PRESS plusシリーズPython実践入門
──言語の力を引き出し、開発効率を高める
──言語の力を引き出し、開発効率を高める
2020年1月24日紙版発売
2020年1月24日電子版発売
陶山嶺 著
A5判/368ページ
定価3,278円(本体2,980円+税10%)
ISBN 978-4-297-11111-3
書籍の概要
この本の概要
Pythonはここ数年で日本語の書籍も増え,開発現場での利用実績も着実に増えてきています。ご自身の第二,第三の言語の選択肢としてPythonが気になっているという方も多いのではないでしょうか。また,「Pythonを始めてみたけど,実際に業務で利用するには不安が残る」「コードレビューに怯えながらPythonを書いている」という方も多いのではないでしょうか。
本書は,そういった方を対象に,Pythonという言語が持つ機能の実践的な使い方を紹介します。Pythonは,日常的なツールからWeb開発,データ分析,機械学習など分野を問わず利用できる汎用性の高い言語です。本書も同じく,Pythonという言語の仕様やその特徴的な機能,標準ライブラリでできることを中心に扱うため,分野を問わず活用していただけます。
こんな方におすすめ
- プログラミングの心得はあるが,Pythonの経験はない方
- Pythonの実践的な書き方を知りたい方
この書籍に関連する記事があります!
- はじめに
- 本書は,これからPythonを始めようとしているプログラミング経験者に最適なPython入門書です。
本書のサンプル
本書の一部ページを,PDFで確認することができます。
- サンプルPDFファイル(807KB)
本書の紙面イメージは次のとおりです。画像をクリックすることで拡大して確認することができます。
目次
第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の入門書を終えたみなさん,こんな悩みはありませんか? 「ここから何を勉強すればいいんだろう」 「Pythonの機能はどういう場面で役に立つんだろう」 本...
-
WEB+DB PRESS総集編[Vol.1~120]
本書は,紙版のみの販売となります。電子版の販売はございません。 『WEB+DB PRESS』の20年間が,この1冊に! 年6冊を発行し続け,読者の皆様に支えられて20年を迎...
-
[増補改訂]良いコードを書く技術 ──読みやすく保守しやすいプログラミング作法
読みやすく保守しやすい「良いコード」の書き方を解説した入門書です。本書を読むと,良いコードを書くための習慣から,名前の付け方,コードの分割や集約を行う方法,...
-
Pythonによる問題解決のためのアルゴリズム設計技法
本書(原題:Python Algorithms: Mastering Basic Algorithms in the Python Language)はアルゴリズムの分析と設計方法について,Pythonを使って説明します。古典的な...
-
Pythonスタートブック[増補改訂版]
好評の「いちばんやさしいPythonの学習書」が約8年ぶりにリニューアル! プログラミングの知識がゼロの方でも理解できるイラストやサンプル満載のわかりやすい解説はそ...
-
Pythonエンジニア養成読本[いまどきの開発ノウハウ満載!]
PythonはGoogleをはじめ米国Web系企業で広く使われてきましたが,国内でもWebはもちろんのこと,豊富なライブラリを用いてさまざまな場面で開発が行われています。最近...
-
GitHub実践入門──Pull Requestによる開発の変革
GitHubの実践的な使い方を,実際に手を動かす形で解説する書籍です。初学者の方にもわかりやすいよう,基本的なGitやGitHubの使い方から,「ソーシャルコーディング」の...