目次
第1章 コードは動けばなんでも同じ?
1-1 「動けばどんなコードでもいい」から卒業しよう
- 1-1-1 コードの読みやすさとバグの関係
- 1-1-2 良いコードが書けると最終的に「楽」になる
1-2 良いコードとはどんなコードなのか?
- 1-2-1 可読性
- 1-2-2 安全性
- 1-2-3 保守性
- 1-2-4 効率性
- 1-2-5 良いコードの基準は複合的な関係
1-3 Pythonらしいコードを書こう
- 1-3-1 コーディング規約
- 1-3-2 標準で用意されてる機能を活用する
- 1-3-3 グルー言語としてのPython
1-4 コードの書きかたにはトレンドがある
- 1-4-1 手続き型プログラミング
- 1-4-2 オブジェクト指向プログラミング
- 1-4-3 関数型プログラミング
- 1-4-4 Pythonとトレンド
1-5 モチベーションを保ちながらスキルアップする方法
- 1-5-1 手を動かすことが大切
- 1-5-2 成長に不安を感じたら
第2章 まずはコードの見た目を整えよう
2-1 コードのお作法「PEP8」の要点をおさえる
- 2-1-1 PEP8をすべて覚える必要はない!
- 2-1-2 インデント
- 2-1-3 空行
- 2-1-4 スペース
- 2-1-5 1行の長さ
- 2-1-6 チームのルール
2-2 コードフォーマッターblackで自動整形してみよう
- 2-2-1 コードフォーマッターのポイント
- 2-2-2 コードフォーマッターblackをVSCodeに設定する
- 2-2-3 コードフォーマッターblackをPyCharmに設定する
第3章 読みやすいコードに改善するテクニック
3-1 コードは適切なサイズで分割しよう
- 3-1-1 ブロックに分けると読みやすい
- 3-1-2 関数に切り出す
- 3-1-3 関数切り出しのコツ
- 3-1-4 モジュールに切り出す
3-2 スッキリしたif文を書くコツ
- 3-2-1 複数の比較演算子を使った条件式をまとめる
- 3-2-2 条件式の左側は調査対象の変数で統一する
- 3-2-3 辞書オブジェクトを使うとif文は不要になることがある
- 3-2-4 複雑な条件は関数にする
- 3-2-5 早期リターンを使う
3-3 ネストが深くなりすぎないようにしよう
- 3-3-1 なぜネストが深くなってしまうのか
- 3-3-2 深いネスト部分を関数で切り出す
- 3-3-3 リスト内包表記や高階関数を使う
- 3-3-4 データ構造を工夫する
- 3-3-5 早期リターンでネストを浅くする
3-4 変数名・関数名・クラス名の命名にも注力する!
- 3-4-1 PEP8の命名規則
- 3-4-2 「名は体を表す」名前と実態を一致させる
- 3-4-3 意味を持たない名前は極力避ける
- 3-4-4 対になる対義語・反対語を使う
- 3-4-5 ブール型はTrue/Falseがわかる名前にする
3-5 要所にわかりやすいコメントを残すには
- 3-5-1 コメントの箇所と量には注意
- 3-5-2 Docstringで説明文を書く
- 3-5-3 Docstringの書きかたをマスターする
第4章 Python便利機能でシンプルなコードを書く
4-1 for文で活躍する組み込み関数
- 4-1-1 enumerate関数でインデックス番号を自動生成
- 4-1-2 zip関数で複数リストを同時に処理
- 4-1-3 rangeで連続した数値をかんたんに作る
4-2 よく使う標準ライブラリ
- 4-2-1 osで環境変数の情報を取得
- 4-2-2 datetimeで日時を操作
- 4-2-3 pathlibでファイル・フォルダを操作
- 4-2-4 jsonでJSON形式文字列を辞書オブジェクトに変換
4-3 スッキリしたコードが書けるPython便利機能
- 4-3-1 リスト内包表記でリスト作成をシンプルにする
- 4-3-2 三項演算子でif文を短縮
- 4-3-3 f文字列でかんたんに変数を埋め込む
第5章 プロが意識する安全性が高いコードとは?
5-1 変数のスコープを意識しよう
- 5-1-1 スコープを理解していないことで起きるエラー
- 5-1-2 for文の中で定義された値は外でも有効
- 5-1-3 関数の中から関数の外の変数にアクセスができる
5-2 ミュータブル/イミュータブルの違いに要注意
- 5-2-1 ミュータブル/イミュータブルとは?
- 5-2-2 ミュータブルなオブジェクトのイコールによる代入は避ける
- 5-2-3 ミュータブルなオブジェクトの引数に注意する
- 5-2-4 ミュータブルなオブジェクトの引数にデフォルト値を設定するときの罠
5-3 「副作用」がないコードを書くために
- 5-3-1 副作用とは?
- 5-3-2 副作用がある関数はバグの温床
5-4 インプレースかどうかを意識しよう
- 5-4-1 インプレースとは?
- 5-4-2 違いを知らずにバグを仕込んでしまうことも
- 5-4-3 それぞれのメリットと使い分け
5-5 型ヒントで可読性と安全性を高める
- 5-5-1 型ヒントはバグを生みにくくする
- 5-5-2 型ヒントの基本的な使いかた
- 5-5-3 柔軟な型ヒント
- 5-5-4 関数以外で使う便利なケース
- 5-5-5 静的型チェッカーを併用する
5-6 安全性の要! 例外処理を書こう
- 5-6-1 例外処理を書いて次のアクションを促す
- 5-6-2 例外の送出で悪影響が広がる事態を防ぐ
- 5-6-3 例外はエスカレーションできる
- 5-6-4 例外処理を書くべき代表的な箇所
5-7 テストコード以外でも使えるassert文
- 5-7-1 assert文の基本的な使いかた
- 5-7-2 assert文を使うケース
5-8 ログを出力しよう
- 5-8-1 なぜログを出力するのか?
- 5-8-2 loggingライブラリを使う
- 5-8-3 例外発生時にエラーメッセージをログに出力する
- 5-8-4 ログの出力フォーマットを指定する
- 5-8-5 ログの設定ファイルを作成する
第6章 中級者への壁! クラスとオブジェクトに慣れる
6-1 クラスとはなにか? 概念を理解しよう
- 6-1-1 Pythonはほとんどのものがオブジェクト
- 6-1-2 クラスはオブジェクトを分類したもの
- 6-1-3 処理もいっしょにまとめてみよう
- 6-1-4 クラス設計の難しさ
- 6-1-5 selfとはオブジェクト自身のこと
6-2 dataclassでデータ格納に特化したクラスを作る
- 6-2-1 dataclassの基本とメリット
- 6-2-2 インスタンス変数にデフォルト値を設定する
- 6-2-3 「==」での比較は値の一致でTrueになる
- 6-2-4 frozen=Trueで変更不可能なオブジェクトを作る
- 6-2-5 asdictで辞書オブジェクトに変換する
6-3 オブジェクト指向を正しく理解する
- 6-3-1 オブジェクトを使う=オブジェクト指向ではない
- 6-3-2 カプセル化
- 6-3-3 継承
- 6-3-4 ポリモーフィズム
第7章 バグがあるかも? テストコードを書こう!
7-1 テストコードとはなにか?
- 7-1-1 アプリケーション開発におけるテストとは?
- 7-1-2 テストコードを書くメリット
7-2 pytestを使ってテストコードを書いてみよう
- 7-2-1 pytestの使いかた
- 7-2-2 fixtureを使って事前処理・事後処理を追加
- 7-2-3 自作関数をモックに置き換える
- 7-2-4 外部ライブラリの関数をモックに置き換える
- 7-2-5 例外発生を確認するためのテスト
- 7-2-6 テストコードが書きやすいコードとは
第8章 自力でエラーを解消するために
8-1 エラーを解消するためのヒント
- 8-1-1 はじめの一歩! エラーメッセージを読もう
- 8-1-2 デバッガーを使ってなにが想定と違うか確認しよう
- 8-1-3 ネットで情報収集をしよう
- 8-1-4 AIを活用しよう
8-2 YouTubeの質問で多いエラー
- 8-2-1 未定義のオブジェクトへのアクセス
- 8-2-2 未インストールのライブラリ使用
- 8-2-3 モジュールと同一名のファイル
- 8-2-4 パスの指定誤り