Python実践入門 言語の力を引き出し、開発効率を高める


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


技術評論社


著者:陶山嶺


はじめに
謝辞
サポートページ

第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 本章のまとめ

索引

書籍目次

Posted by shi-n