背景
「あれ?このAPIちゃんと動いてなくね?」という恐ろしいバグを見つけてしまった時にAPI覗いて、意外とやってしまいがちなミスだなと思ったので書きます。
例えばこんなコード。意図してるのは複数のアイテムを処理すること。
items_to_process = [101, 102, 103]
processed_items = []
for item_id in items_to_process:
processed_items = [item_id * 10]
print(processed_items)
問題の解説
だが実際には最後のアイテムのみがprocessed_itemsに保持される。
processed_itemsリストが各イテレーションで上書きされ、期待されていた全てのアイテムIDが処理されず、最終的に最後の要素のみが残る。
ちゃんとappendしよう
items_to_process = [101, 102, 103]
processed_items = []
for item_id in items_to_process:
# 各イテレーションで得られたアイテムをリストに追加し、全てのアイテムが処理されるようにする
processed_items.append(item_id * 10)
print(processed_items) # 期待通り、全てのアイテムIDが処理された結果が出力される
appendしてループを使ったリスト操作時の変数上書きを防ごう。
おわり