Pythonの入門書としてオライリーの初めてのPythonを読んだ.
800page越えという,非常識的な厚さの入門書だったけどPythonについてだいぶわかった気がする.
以下読んでる途中のメモ転載
- Pythonの変数
-
- 型の情報をもたない
- 型の情報をもつのはオブジェクト
-
- オブジェクトには2つのヘッダフィールド
-
- 型についての情報(型の識別子)を保持するフィールド
- 「オブジェクトがいくつの変数から参照されているか」(リファレンスカウンタ)を保持するフィールド
- 不変性をもつかどうか,が重要な意味を持つ
- Pythonの関数はCなどのコンパイラ言語における関数と意味合いが異なる
-
- 関数はオブジェクト
-
- 関数名は関数オブジェクトへのリファレンス
- 関数オブジェクトは,関数名以外の変数にも代入できる
-
- リストの要素へも可.
- ネストスコープが難しい(16章)
-
- クロージャ(ファクトリ関数)
- lambda式とネストスコープも難しい
-
- 要復習
- p.374も
- lambda式
-
- コードの凝縮のため
-
- 複雑で規模の大きい関数の作成にはdef statement
- 単純な関数であればlambda式を使う
- ジェネレータ
- モジュール
-
- importとfromの違い
- パッケージインポート
-
- 相対インポートはあまり読まない
- fromによってコピーされた変数はリロードの影響を受けない
- 21章は要復習
- クラス
- 名前空間の実体はディクショナリ
- 抽象クラス
-
- 実際の処理をどうするかは各クライアントで定義,カスタマイズする
- クラス設計
- デリゲーション
-
- __getattr__というフックメソッドを使用するのが通常
- ミックスインクラス
-
- 様々な種類のクラスに応用できる汎用性の高いメソッドを備えたクラス
- 結合メソッド,非結合メソッド
-
- 非結合メソッド
-
- クラスを利用して呼び出した場合
- 結合メソッド
-
- インスタンスを利用して呼び出した場合
- ビルトインオブジェクトをカスタマイズすることができる
-
- たとえばインデクシングをデクリメントしたり
- スタティックメソッド
-
- クラス属性を,インスタンスの下図を記録するためのカウンタとして利用できる
- 関数デコレータ
-
- ある関数に,別の関数に書かれたロジックを付加することができる
- http://www17.atpages.jp/~lambda7/py/decorator.html
- クラス属性を変更するとインスタンス属性も変化する
-
- 逆はしない
- 例外