My kindle library and highlights

Follow @umihico Star Issue

cover_img

Author:Michal Jaworski、Tarek Ziade、稲田 直哉、芝田 将、渋川 よしき、清水川 貴之、森本 哲也

Title:エキスパートPythonプログラミング 改訂2版 (アスキードワンゴ)

Date:木曜日 11月 1, 2018, 25 highlights

@797
Pythonの主要な実装は、C言語で書かれていて CPython と呼ばれています。たいてい、Pythonと言えばこのCPythonのことを指しています。
—-

@879
現在では、PyPyはCPython実装に比べて圧倒的に速いという驚くべきベンチマーク結果が出ています。
—-

@1684
ハッシュの計算方法が異なる別のデータ型をキーに使うと、順序が保存されない
—-

@1923
デコレータとして使用できるのは、一般的に、1つの引数(デコレーション対象)を受け取れる、名前つきの callable( 呼び出し可能)オブジェクトです。
—-

@2059
メモ化( memoizing、 https://en.wikipedia.org/wiki/Memoizing を
—-

@2459
super 自体はメソッド以外にも使えます。 super はインスタンスの親クラスのメソッド実装を呼び出す必要があるところではどこでも使用できます。
—-

@2859
プロパティの動作を変更する必要があるときは、親クラスの実装を借りずに、プロパティ用のすべてのメソッドを派生クラスで書き換えることをお勧めします。
—-

@2874
クラスに対して、slots という名前で属性名のリストをセットすることで、クラスをインスタンス化するときに__dict__ が作成されなくなります。この機能は、属性が少ないクラスにおいて、すべてのインスタンスで__dict__ を作らないことで、メモリ消費を節約することを目的としています。
—-

@5016
requests というよく知られているパッケージは urllib3 の特定のバージョンに強く依存していて、他のバージョンでは正しく動作しないため、 urllib3 をソースに同梱しています。
—-

@5362
TLS/SSL通信はNginxや Apacheといった最前線にいるWebサーバーで処理するのが一般的に良い方法とされています。Pythonアプリケーション自体は、HTTPSではなくシンプルなHTTPプロトコルしか話せない
—-

@5802
Pythonは実行性能で選ばれる言語ではありません。Pythonは実行速度ではなく開発速度が速い言語です。そのため、ピュアPythonでは効率的に解決できない問題に直面することがあります。  ほとんどの場合、パフォーマンスの問題を修正するには正しいアルゴリズムとデータ構造を選択するだけで十分で、言語によるオーバーヘッドという定数係数を気にする必要はありません。
—-

@6896
目指すべきは、リポジトリへpushされたすべてのコミットをテストすることだと知っておいてください。
—-

@7154
プログラマの時間はシリコンチップよりはるかに高価だと覚えておいてください。
—-

@8201
nose は((?:^|[b_.-])[Tt]est) という正規表現にマッチするモジュールの中の、同じ正規表現にマッチするすべてのクラスと関数を実行します。
—-

@8933
CPUは SpeedStep などの省電力機構を持っているので、テストを起動したときの状況によっても結果は異なってきます。ほかにもDNSキャッシュやCPUキャッシュなどのいろいろなキャッシュがテストの結果に影響するかもしれません。このため、小さいコード片は、繰り返し継続してテストすることをお勧めします。
—-

@9270
配列がすでにいっぱいのときに新しい要素を追加するには、新しい配列を確保して、既存の要素(への参照)をそこにコピーします。このため、 list.append() の 最悪計算量 は O( n) になります。
—-

@9302
リストからの高速な探索が必要であれば、Python標準ライブラリの bisect モジュールを使えるかもしれません。
—-

@9311
ソートするのには O( n log n) の計算量を必要とします。この計算量は O( n) よりも大きいので、一度の探索のためだけにリストをソートするのは逆効果です。
—-

@9324
in 演算子により result リストからの探索により O( n) の計算量が発生
—-

@9396
defaultdict 型は dict 型と似ていますが、新しいキーに対する値のデフォルトファクトリを持っています。これによりマッピングを初期化するときの分岐を減らすことができますし、 dict.setdefault メソッドを使うよりも効率的です。
—-

@9664
サービスがヒットしたら、アプリケーションを数百台、あるいは数千台のマシンで実行する必要が出てくるかもしれません。キャッシュする値をプロセスメモリに保存すると、すべてのプロセスが重複してその値を持つことになります。
—-

@9750
並行性と並列性は同じものではありません。
—-

@9791
外部のリソースを利用していない場合には、 シングルコアCPU上ではマルチスレッド化しても高速にはならず、逆にスレッドの管理のために少しのオーバーヘッドが生じます。
—-

@10686
Singleton はクラスのインスタンスオブジェクトを1つに制限します。  Singletonパターンを使うと、あるクラスのインスタンスがアプリケーション内で常に1つしか存在しないことを保証できます。
—-

@10935
isinstance() 関数は、継承を考慮してくれます。 assert isinstance(instance, list)
—-