関数のキーワード引き数で=[]となっていたら、最初だけ初期化されると覚えておけばいい?

はい、その通りです。関数のデフォルト引数でミュータブルなオブジェクト(リストや辞書など)を使用する場合、そのオブジェクトは関数が定義されたときではなく、関数が最初に呼び出されたときに初期化されます。その後の関数の呼び出しでは、同じオブジェクトが再利用されます。

この動作を理解していれば、意図しない結果を避けるために適切なコードを書くことができます。通常、これに対処するために、ミュータブルなデフォルト引数を使う代わりに None を使い、関数内で初期化してから使用する方法が推奨されます。

例えば、修正した関数は次のようになります:

python
def culc(a, b=1, squares=None, cubes=None): if squares is None: squares = [] if cubes is None: cubes = [] squares.append(a ** 2) cubes.append(b ** 3) return squares, cubes

このようにすることで、毎回関数が呼び出されるたびに squarescubes が新しい空のリストで初期化されます。

未分類

Posted by ぼっち