Pythonの関数とリスト、そして「デフォルト引数」についての理解

programing
Portrait of beautiful Asian woman looking happy exploring city alone. Pretty Japanese girl enjoying good day outdoors

下記のPythonのスクリプトを、Python超初心者にも分かりやすく解説してください。 print部分のそれぞれの実行結果がどうなるのかと、なぜそうなのかを教えて下さい。

def function(number, defautl_arg_list=[]):
    default_arg_list.append(number)
    return default_arg_list

print (function(1))
print (function(2, [3,4]))
print (function(3))
print (function(4, [5, 6]))
print (function(5))

はい、このスクリプトはPythonの関数とリスト、そして「デフォルト引数」についての理解が必要な部分となります。まずはそれぞれの部分を解説し、その後実行結果を見てみましょう。

append()メソッド

Pythonには「リスト」というデータの集合を扱うためのデータ型があります。リストは複数の要素を順番に並べたもので、例えば[1, 2, 3]のようになります。リストの要素は何でもよく、数値だけでなく文字列や他のリストも含めることができます。

append()はリスト型のメソッドで、リストの最後に新しい要素を追加するために使います

具体的な使い方は以下のようになります。

# 空のリストを作成
my_list = []

# リストに要素を追加
my_list.append(1)
my_list.append(2)
my_list.append(3)

print(my_list)  # 出力: [1, 2, 3]

このコードでは、まず空のリストmy_listを作成しています。その後、append()メソッドを使ってリストの最後に123という数値を追加しています。最後にリストを表示すると、[1, 2, 3]という結果が出力されます。

つまり、append()を使うと、リストに新しい要素を簡単に追加することができます。このような操作は、データの集合を扱うときに非常によく使われます。

まず関数functionについて説明します。この関数は二つの引数を取ります。一つ目の引数はnumber、二つ目の引数はdefault_arg_listです。しかし、default_arg_listはデフォルト引数として設定されており、何も指定されなかった場合には空のリスト([])が自動的に代入されます。

関数の中身を見ると、default_arg_list.append(number)という行があります。appendはリストに要素を追加するメソッドで、ここではnumberdefault_arg_listの最後に追加しています。

そしてreturn default_arg_listで、追加後のdefault_arg_listを戻り値として返しています。

では、実行結果を見てみましょう。

  1. print (function(1))最初の呼び出しでは、number1が渡されますが、default_arg_listは指定されていません。よってデフォルトの空リストが使用されます。1を追加したリスト[1]が結果となるので、[1]が表示されます。
  2. print (function(2, [3,4]))ここでは、number2が、default_arg_list[3,4]が渡されます。2がリストの最後に追加されて、[3, 4, 2]が表示されます。
  3. print (function(3))ここで注意が必要です。デフォルト引数のリストは、関数が定義されたときに一度だけ生成され、それ以降同じオブジェクトが使い回されます。なので、最初のprint (function(1))でデフォルト引数のリストに1が追加された結果が維持されています。今回は再びデフォルト引数が使われるので、リストは[1]から始まり、3が追加されて[1, 3]となり、これが表示されます。
  4. print (function(4, [5, 6]))number4default_arg_list[5, 6]が渡されます。新しいリストに4が追加されて[5, 6, 4]が表示されます。
  5. print (function(5))この呼び出しでもデフォルト引数が使われます。前回のデフォルト引数のリストの状態は[1, 3]だったので、5が追加されて[1, 3, 5]となり、これが表示されます。

したがって、実行結果全体としては以下のようになります。

[1]
[3, 4, 2]
[1, 3]
[5, 6, 4]
[1, 3, 5]

この挙動を理解すると、デフォルト引数には変更可能なオブジェクト(リストや辞書など)を設定すべきではない、という一般的なアドバイスが理解できると思います。このスクリプトはその一例となっています。

コメント

タイトルとURLをコピーしました