2

コードの一部をリファクタリングしているときに、次のことに気付きました。

if product_id in [c["id"] for c in self.data.load_products()]:
    # Do something

次に、load_products()SQL クエリを実行し、すべての製品に対して:

  • 一部の比較的 CPU コストの高い操作を実行し、次のことを行います。
  • yield商品を1点ずつご注文者様に返却する際に使用します。

私が理解しているように、リスト内包表記とジェネレータ式の違いは、リスト内包表記の場合、最初の製品が一致した場合でも、すべての製品がデータベースからロードされて処理されるということです。

したがって、次のようなジェネレータ式に置き換えると:

#                ↴                                          ↴
if product_id in (c["id"] for c in self.data.load_products()):
    # Do something

最終的に作業を減らすことでコードを改善できます。つまり、一致が見つかると、次の製品はデータベースから読み込まれず、処理もされません。

それでも、確かに私はPythonをよく知りません。

私は正しいですか?Python は一致を見つけるとすぐに停止しますか? それとも、両方のコードが同じように実行され、データベースからすべての製品をロードしますか?

4

2 に答える 2