この記事ではPythonの書き方を6事例にまとめてみました。
1. ルート モジュールをインポートしないでください
Python を使用する場合、組み込みモジュールであってもサードパーティ モジュールであっても、モジュールのインポートは避けては通れません。場合によっては、モジュールの 1 つまたはいくつかの関数またはオブジェクトだけが必要な場合があります。この場合、ルートモジュールをインポートする代わりに、必要な関数またはオブジェクトのみをインポートするようにしてください。
これは簡単な例です。プログラム内でいくつかの数値の平方根を計算する必要があるとします。
遅い例
悪い例では、数学モジュールをインポートし、 math.sqrt() を使用して関数にアクセスします。もちろん問題はありませんが、sqrt() 関数をインポートできればパフォーマンスは向上します。
より高速な例
2. ドット/ドット チェーンの使用を避ける
ドットの使用は非常に直感的です。 Python でオブジェクトのプロパティまたは関数にアクセスします。ほとんどの場合、問題ありません。ただし、ドットの使用やドットのリンクさえ避けることができれば、実際にはパフォーマンスが向上します。
以下の例は、リストに数値を追加してから削除する方法を示しています。
遅い例
速い例
これが実際に同じことを行うとは信じられませんが、確認できます。
多くの Python 開発者が、この例のテクニックはちょっとばかげていると声を上げて言うでしょう。実際、私自身も上記のようなコードを書くことはほとんどありません。ただし、この方法でプログラムでき、さらに高速化できることを知るのは素晴らしいことです。
リストに追加したりリストから項目を何百万回も削除したりする場合は、おそらくこのトリックの使用を検討する必要があります。そのため、コードのパフォーマンスと読みやすさのバランスをとる必要があります。
3. 接続文字列を使用しないでください
文字列は Python では不変です。したがって、「 」を使用して複数の文字列を 1 つの長い文字列に連結すると、各部分文字列は個別に操作されます。
もっと遅い例
具体的には、部分文字列ごとにメモリ アドレスを要求し、そのメモリ アドレスと組み合わせる必要があります。生の文字列が連結されます。それがオーバーヘッドになります。
より高速な例
ただし、 join() 関数を使用すると、関数はすべての部分文字列を事前に認識しており、メモリ アドレスが割り当てられます。長さは最終的に連結された文字列に適しています。したがって、各部分文字列にメモリを割り当てるオーバーヘッドはありません。
可能な限り join() 関数を使用することを強くお勧めします。ただし、2 つの文字列を連結したい場合もあります。または、便宜上、「」を使用したいと思います。このような場合、「 」を使用すると、可読性が向上し、コード長が短くなります。
4. 値の交換に一時変数を使用しないでください
多くのアルゴリズムでは、2 つの変数の値の交換が必要です。他のほとんどのプログラミング言語では、これは通常、次に示すように一時変数を導入することによって行われます。
遅い例
速い例
ただし、Python では、temp 変数を使用する必要はありません。 Python には、以下に示すように、この値交換を実装するための組み込み構文があります。
5. If 条件を使用してショートサーキットを行う
「ショートサーキット」評価は多くのプログラミング言語に存在し、同様のことが Python にも当てはまります。基本的に、最初の引数が式全体の値を決定するのに十分でない場合にのみ 2 番目の引数が実行または評価される、特定のブール演算子の動作を指します。
これを例で示してみましょう。次のようなリストがあるとします。
my_dict = [
{
'name': 'Alice',
'age': 28
},
{
'name': 'Bob',
'age': 23
},
{
'name': 'Chris',
'age': 33
},
{
'name': 'Chelsea',
'age': 2
},
{
'name': 'Carol',
'age': 24
}
]
私たちの仕事は、リストをフィルタリングして、名前が「C」で始まり、年齢が 30 歳以上であるすべての人々を見つけることです。
もっと遅い例
同時に満たす必要がある条件が 2 つあります:
- 名前が「C」で始まる
- 年齢≥ 30 したがって、次のコードを書くことができます。
###
より高速な例
前の例のコードには何も問題はありません。ただし、この架空の例では、「クリス」だけが 30 歳を超えています。
最初に名前をチェックする条件を書くと、3 つの名前 (Chris、Chelsea、Carol) が満たされます。次に、年齢に関する 2 番目の条件が 3 人全員について再度チェックされます。
ただし、短絡的な評価のため、年齢条件を最初に書くと、クリスの年齢だけが 30 歳以上となり、名前が「C」で始まるかどうかが再度チェックされます。
この場合、ほぼ 100% 高速になります。
6. For ループを使用できる場合は、while ループを使用しないでください。
Python では、パフォーマンスを向上させるために C を大量に使用します。つまり、CPython です。ループ ステートメントに関しては、Python の For ループのステップは比較的少なく、while ループよりも多くのステップが C コードとして実行されます。
したがって、Python では For ループを使用できますが、while ループは使用しないでください。これは、For-Loop が Python でより洗練されているだけでなく、パフォーマンスも優れているためです。
遅い例
速い例
以上が知識をリフレッシュしましょう!私は常に Python プログラムの速度を低下させるこれら 6 つの悪い習慣を使用しています。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。