私は最適化したい。Pythonでループする:最初の繰り返しの前に行うこと
シンプルなソリューション
connection = get_db_connection()
for item in my_iterator:
push_item_to_db(item, connection)
欠点:
get_db_connection()
が遅いです。 my_iterator
が空の場合、私はそれを呼ぶことを避けたいと思います。
ソリューション
connection = None
for item in my_iterator:
if connection is None:
connection = get_db_connection()
push_item_to_db(item, connection)
欠点 "なしの場合":
100kの項目がmy_iterator
である場合(それは一度だけ必要とされているが)、その後、if connection is None
が100K回呼び出されます。私はこれを避けたい。
完璧なソリューション...
- は、イテレータが
- 空の場合は、すべての反復のために無駄
if connection is None:
を呼び出すことはありませんget_db_connection()
を呼び出すことはありません。
connection = None
for item in my_iterator:
if connection is None:
connection = get_db_connection()
push_item_to_db(item, connection)
シンプルなソリューション:
これはオーバー最適化大規模です。 '' not i''は、 '' push_item_to_db''で何が起きるかと比べると、あまり重要でないオーバーヘッドです。 –
'get_db_connection'が遅い場合、' if'文を避けるために「最適化」するのは正しいことではありません...それはあなたのイテレータが各ループに対して終了する 'StopIteration'を投げるべきです空です。 –
@DanielRosemanはい、これは「大過剰の最適化」です。しかし、それにもかかわらず私はそれを解決する手がかりがないので、私はこの質問が好きです。私のためには本当に私を "傷つける"質問がもっと楽しいです。 – guettli