Pythonステップ3-いつリストを使わないでください
2514 ワード
このシリーズの文章は一連の学習ノートで、Python 3の原理、性能をより深く分析することを望んで、文章の中の大部分の観点はすべて原作の作者の観点(以下)で、本人は本の中の例に対して実践と総括を加えて、そして相応のPythonのC言語のソースコード(3.6.1)を結びつけて、分かち合います.原著:『High Performance Python』by O'Relly Media、著者Micha Gorelick、Ian Ozsvald 『Fluent Python』by O'Relly Media、著者Luciano Ramalho Pythonプログラマーはリストを使いすぎることがあります.リストが柔軟すぎて使いやすいからです.私はそうです.様々なニーズに対して、Listは良い選択ではありません.が1百万個の数字を格納する必要がある場合、arrayはより良い選択であり、arrayはfloat objectを抽象化するのではなく、bytesで数字を表し、C言語のようにします. 私たちはよく検査(containment checks)を含みます.例えば、1つの値が1つの集合にない場合、集合(sets)を使って、集合がメンバー検査に対して特別な最適化をしてください.
Arraysリストがパケット数だけの場合、array.ArrayはListよりも効率的です.arrayはすべての可変シーケンスの方法をサポートし、エクスポートデータをインポートするための追加の方法もある.frombytes, .tofile. PythonのarrayのコンパクトさはC言語の配列に似ている. array.tofileとarray.fromfileも便利で効率的です
Memory Views
本の中の著者は、arraysをよく使うが、Memory Viewsを知らないと、私はOUTしたと話している.私はまだ本当に知りません...Memory Viewsは内蔵タイプで、共有メモリのシーケンスであり、lets you handle slices of arrays without copying bytesである.これもNumPyのベースです.C言語では、unsigned charは1 bytes、signed charは2 bytesと多くのタイプがあり、本の列は5つのsigned charのシーケンスを作成し、unsigned charに変換し、10~、1つのbytesを修正し、signed charに戻り、その間にcopy操作はなく、メモリを処理しているだけです.これは私たちが効率的なアルゴリズムを書くのに役立ちます.
NumPyとSciPy
言うまでもなく、この2つのライブラリはPythonを科学計算の分野で主流にし、この2つのライブラリの使用はここで紹介されていない.CとFortranの性能、PythonのAPI.
a = 2
if a in [1,2,3]:
pass
else:
pass
Arrays
>>> from array import array
>>> from random import random
>>> nums = array('d', (random() for i in range(10**7)))
>>> nums[-1]
0.627233014646329
>>>
>>> fp = open('tmp', 'wb')
>>> nums.tofile(fp)
>>> fp.close()
>>>
>>> nums_import = array('d')
>>> fp = open('tmp', 'rb')
>>> nums_import.fromfile(fp, 10**7)
>>> nums_import[-1]
0.627233014646329
>>> nums_import == nums
True
>>> fp.close()
>>>
Memory Views
本の中の著者は、arraysをよく使うが、Memory Viewsを知らないと、私はOUTしたと話している.私はまだ本当に知りません...Memory Viewsは内蔵タイプで、共有メモリのシーケンスであり、lets you handle slices of arrays without copying bytesである.これもNumPyのベースです.C言語では、unsigned charは1 bytes、signed charは2 bytesと多くのタイプがあり、本の列は5つのsigned charのシーケンスを作成し、unsigned charに変換し、10~、1つのbytesを修正し、signed charに戻り、その間にcopy操作はなく、メモリを処理しているだけです.これは私たちが効率的なアルゴリズムを書くのに役立ちます.
>>> numbers = array('h', [-2,-1,0,1,2])
>>> memv = memoryview(numbers)
>>> memv
>>> len(memv)
5
>>> memv[1]
-1
>>> memv_oct = memv.cast('B')
>>> memv_oct.tolist()
[254, 255, 255, 255, 0, 0, 1, 0, 2, 0]
>>>
>>> len(memv_oct)
10
>>> memv_oct[0]
254
>>> memv_oct[5] = 4
>>> numbers
array('h', [-2, -1, 1024, 1, 2])
>>>
NumPyとSciPy
言うまでもなく、この2つのライブラリはPythonを科学計算の分野で主流にし、この2つのライブラリの使用はここで紹介されていない.CとFortranの性能、PythonのAPI.