Backlucerna← コレクション

空のはずのカゴに、なぜ前回の中身が残ってる?

python可変デフォルト引数
ソースコード
def add_item(item, basket=):
    basket.append(item)
    return basket
❯ 上のコードの色つき部分を打ち替えてみる
上のコードの basket=… を [] ↔ None に打ち替えてOK。[] だと呼び出しをまたいで累積、None だと毎回まっさらに結論が反転します。
メモリ / 実行の様子ステップ 1 / 5
👁 見えるところ ── 空カゴのはずが前回の中身が残る
まず左が関数の全部 ── item をカゴ(basket)に入れて返すだけの、ごく当たり前の関数です(basket=[] は省略時のカゴのつもり)。add_item("りんご") を呼ぶと ['りんご']。ここまでは当たり前。── ところが別の所でもう一度 add_item("ばなな") を呼ぶと、空カゴのはずが ['りんご', 'ばなな']。ばななの呼び出しは、りんごを一言も言っていないのに、前回の中身が残っている。呼ぶたび basket は空 [] から始まる…はずでは? ▶ で仕組みを覗きます。
← → キーでも動かせます

ほかのピース

「動く」の、その一歩奥へ。

Backlucerna · フェーズ1 MVP · Astro + React island