コードの一部をリファクタリングしているときに、次のことに気付きました。
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 は一致を見つけるとすぐに停止しますか? それとも、両方のコードが同じように実行され、データベースからすべての製品をロードしますか?