初めてのPython メモ

Pythonの入門書としてオライリーの初めてのPythonを読んだ.
800page越えという,非常識的な厚さの入門書だったけどPythonについてだいぶわかった気がする.

 

以下読んでる途中のメモ転載

 

  • Pythonの変数
    • 型の情報をもたない
    • 型の情報をもつのはオブジェクト
      • オブジェクトには2つのヘッダフィールド
        1. 型についての情報(型の識別子)を保持するフィールド
        2. 「オブジェクトがいくつの変数から参照されているか」(リファレンスカウンタ)を保持するフィールド
  • 不変性をもつかどうか,が重要な意味を持つ
  • Pythonの関数はCなどのコンパイラ言語における関数と意味合いが異なる
    • 関数はオブジェクト
      • 関数名は関数オブジェクトへのリファレンス
      • 関数オブジェクトは,関数名以外の変数にも代入できる
        • リストの要素へも可.
  • ネストスコープが難しい(16章)
    • クロージャ(ファクトリ関数)
    • lambda式とネストスコープも難しい
      • 要復習
      • p.374も
  • lambda式
    • コードの凝縮のため
      • 複雑で規模の大きい関数の作成にはdef statement
      • 単純な関数であればlambda式を使う
  • ジェネレータ
  • モジュール
    • importとfromの違い
    • パッケージインポート
      • 相対インポートはあまり読まない
    • fromによってコピーされた変数はリロードの影響を受けない
  • 21章は要復習
  • クラス
    • 演算子オーバーロード
        • フックメソッド(前後に2つの下線のついた特殊なメソッド)
          • __add__や__init__
          • __getitem__はインデクシングの処理に対応するフックメソッド
            • あらゆる反復処理に対応できる
            • ただし通常は__iter__の方が便利
  • 名前空間の実体はディクショナリ
  • 抽象クラス
    • 実際の処理をどうするかは各クライアントで定義,カスタマイズする
  • クラス設計
    • IS-A関係
      • Robot is a chef.
      • Chef is an employee.
    • HAS-A関係
      • コンポジション
        • オブジェクトの中にオブジェクトを組み込むこと
        • クラスのメソッドの中で他のクラスのインスタンスを作成するようにすること
          • 組み込み先:コンテナオブジェクト
          • 他のクラスを作成するメソッド:コンテナメソッド
      • 集約とも
  • デリゲーション
    • __getattr__というフックメソッドを使用するのが通常
  • ミックスインクラス
    • 様々な種類のクラスに応用できる汎用性の高いメソッドを備えたクラス
  • 結合メソッド,非結合メソッド
    • 非結合メソッド
      • クラスを利用して呼び出した場合
    • 結合メソッド
  • ビルトインオブジェクトをカスタマイズすることができる
    • たとえばインデクシングをデクリメントしたり
  • スタティックメソッド
    • クラス属性を,インスタンスの下図を記録するためのカウンタとして利用できる
  • 関数デコレータ
  • クラス属性を変更するとインスタンス属性も変化する
    • 逆はしない
  • 例外
    • try/finallyステートメント
      • 例外が発生してもしなくてもfinallyブロック中のコードが実行される
    • クラス例外
      • raiseステートメントでクラス例外を発生させるにはクラスのインタスタンスが必要