
Dive into Pythonなどを読んでドキュメントを読んだ後、疑問が生じますが、次に何を読むべきでしょうか? python.org で書籍のリストを参照できます。 Advanced Booksのセクションがありますが、その中には6冊しかありません(7冊目は出ていませんでした)。
幸いなことに、Pythonには非常に詳細で高品質のドキュメントがあります。 しかし、その中でも、多くのトピックは表面的にしか触れられていないか、見つけるのが非常に困難です(ドキュメントが大きいため、どこを探すべきかわからない場合は見つけられません)。
以下は、Python、そのデバイス、機能に関する複雑な資料です。 すべては英語です(技術英語を知らないため)。 Dive into Pythonについて私はunningしています。 引用された資料のほとんどは、Pythonについての十分な知識とそのプログラミングの経験を必要とします。
公式文書の記事
データモデル
Pythonのオブジェクトに関する基本的な記事。 それは心で知られなければなりません(真実、真実)。 それなしでは、Pythonの動作をさらに理解することは事実上不可能です。 私も焦点を当てたいと思います:
- 記述子の実装 。 私の意見では、記述子はPythonの最高の比類のない能力ですが、最も過小評価されています。 現在、それらはほとんどの場合、フレームワークでのみ使用されています。 何らかの方法で、記述子を使用して開発を簡素化し、コードの品質を向上させる方法を記述する必要があります。
- 属性アクセスのカスタマイズ 。 そして最初に読むべきことは
__getattribute__
と__getattr__
違いです。 - 新しいスタイルのクラスの特別なメソッド検索 。 重要:マジックメソッドへのアクセスは、それらを直接呼び出す(
len(obj)
およびobj.__len__()
)場合を除き、__getattribute__
バイパスします。
例外
例外では、継承を処理する必要があります( PEP 352:New-Style Classesとしての例外 )。 Python 2.4では、
Exception
は古典的なクラスであり、
object
サブクラスではありません。 Python 2.5では、
Exception
すでに
BaseException(object)
継承してい
BaseException(object)
。 これは新しいクラスです。 また、バージョン2.4では
KeyboardInterrupt
と
SystemExit
Exception
継承し、2.5
BaseException
継承し
Exception
。
また、Python 2.4の例外の階層とPython 2.6の階層 (2.5と比較して、いくつかのクラスのみが追加された)を直接取得および比較(2つのウィンドウを並べて配置)することをお勧めします。
クラス、属性、およびメソッドに関する記事
Python 2.2での型とクラスの統合 、Guido van Rossum
新しいスタイルのクラスとは何かに関する言語の作成者からの記事。 なぜ読まなければならないのかを書く必要はないと思います(数回)。
Python 2.3メソッド解決順序 、Michele Simionato
メソッド(MRO)および属性へのアクセスの順序は、多重継承でどのように計算されますか?
__mro__
属性を介して新しいクラスを取得できます。
シャラブチャトゥルベディ:
とても素敵で素晴らしい記事の本+美しくレイアウトされています。
Pythonのタイプとオブジェクト
type
と
object
はどのように関連していますか?
Pythonの属性とメソッド
新しいクラスで属性にアクセスする方法、関数とメソッドの違い、記述子の説明、MRO。
ニシキヘビになる
Pythonのスタイルでコードを書く方法(著者のすべての記事をリストするためだけに追加された)、それほど重要ではない短い記事。
メタクラス
メタクラスに関する[非常に有名な]引用を1つ挙げたいと思います。
英語 [メタクラス]はより深い魔法ですメタクラスは複雑な魔法です、 99%のユーザーが、どの99%の開発者であっても 心配する。 心配しないでください。 もしあなたが それらが必要かどうか、あなたが必要かどうか尋ねます しないでください(実際にメタクラス化する人は、そうではありません。 彼らが確実に必要とすることを知る必要がある 彼らはそれらを必要とし、本当に必要ないことを、絶対に 理由についての説明が必要です)これを確信しており、彼らは必要ありません Tim Peters(clp post 2002-12-22)理由の説明)。 (あなたが知らないのは非常に悪いです この記事のリンクの英語 英語の資料のみ)
スタイルはもちろん、幅属性のないセルを含む表を描画するよりも、等幅で挿入する方が簡単です。 正直に約20分間試しました。
だから、 これはそうではありません 。 メタクラスがわからない場合は、Pythonがわかりません。 今、動機付けの後、あなたは記事に戻ることができます。
クラス作成のカスタマイズ
公式ドキュメント。
Pythonメタクラス:誰? なんで? いつ? 、マイク・フレッチャー 、PDF
メタクラスを使用することができる方法と理由の多くの実際的な例[しかし、しばしば必要ではない 、著者]。
Pythonでのメタクラスプログラミング 、 パート2 、 パート3 、David Mertz、Michele Simionato
非常に詳細な記事は、骨ですべてを理解しています。 しかし、それは非常に退屈でアカデミックな記述です。 これがIBM DeveloperWorksの記事に対する私の偏見にすぎないことは完全に可能です。
Python 3000、PEP 3115のメタクラス
3番目のPythonのメタクラス。 主な違いは、
class Foo(*bases, **kwargs)
クラス定義
class Foo(*bases, **kwargs)
で
__prepare__
機能と、順序付けされた辞書などのクラス属性のマッピングを返す
__prepare__
関数のサポートです。
一般に、メタクラスについて:知って、知って、もう一度知る。 しかし! それらを使用することに決めた場合、考えて、もう一度考え、それにもかかわらず、それらなしでやってみてください;-D。
他のトピックに関する記事
Python 401:いくつかの高度なトピック 、PDF
文字列補間の最良かつ最も詳細な説明(
'Hello, %s.' % username
)。 さらに、イテレーター、ジェネレーター、ディスクリプター、メタクラス、メソッドの機能が遅い理由(オブジェクトは呼び出しごとに作成されるため)など
記述子の使い方ガイド 、レイモンド・ヘッティンガー
記述子の機能、それらの呼び出し方法と使用方法。
デビッド・ビーズリー
彼は非常に優れた、そして最も重要なことには、実用的な記事を書いています。 ジェネレータを使用してApacheログを解析する方法、またはコルーチンで「オペレーティングシステム」を記述する方法を読むことができるのは彼だけです。
Python GILの内部
Global Interpreter Lockの仕組みと、Pythonでスレッドを使用するとプログラムが遅くなることがある理由。
新しいGILの内部(Python 3.2)
Python 3.2に含まれる新しいGILの説明とテスト(および2.7に移植される可能性があります)。
システムプログラマ向けジェネレータトリック 、 バージョン2
ジェネレーターの実際の使用とその利点(速度+低メモリ消費)。
コルーチンと並行性に関する好奇心の強いコース
コルーチンとは何か、通常のジェネレーターとは明確に区別する必要がある理由(これらには異なる機能があります:データを生成するものと、処理するものがあります)。 最後に、彼はそれらにオペレーティングシステムの類似物を書きます。
私の推薦
dir(method)
および
dir(func)
の結果を参照してください。 モジュール
new
、
itertools
、
functools
のヘルプを
itertools
で
functools
。 まだわからない場合は、関数
map
、
reduce
、
zip
および
filter
精通してください(mapは一度に多くの反復子を取ることができます)。
抽象基本クラスとコレクションについて読んでください。 また、Pythonだけでなく、 Javaでも使用できます 。 ABCは、多くの点で後を追っています。
年次開発者会議であるPyConのWebサイトにアクセスしてください。 過去の会議の資料も利用できます(多くの場合利用できません)。 あなたは会議/スケジュールで見る必要があります 。
Python Cookbookを必ず読んでください。 この実用的な本は単に優れています。 decorate-sort-redecorateメソッドを使用して迅速にソートする方法、Pythonが使用するソートアルゴリズム(少数の要素の挿入ソートと大規模な要素のティムソート)、XMLの操作方法、モジュールの動的作成など。
おわりに
ブックマークに覚えているか見つけたと書きました。 それが大いに役立つことを願っています。 また、 ipythonとそれを忘れないでください? および?? ..(知らない人にとっては、これはPythonの非常に強力なインタラクティブシェルであり、質問はオブジェクトに関する情報を示します
import sys; sys?
たとえば、
import sys; sys?
)。 あなたの中に強さが来るかもしれません。