この記事では、Python 関数のデフォルト パラメーターとしてリストを使用する方法 (コード例) を紹介します。これには特定の参考値があります。必要な友人はそれを参照できます。お役に立てば幸いです。
この記事では、著者が仕事中に遭遇した Python の落とし穴、つまりリストをデフォルトのパラメータとして使用することについて紹介します。
Python ではリスト (リスト) は可変オブジェクトであるため、リストの内容は関数内で変更される可能性があることがわかっています。もう 1 つ注意すべき点は、関数のデフォルト パラメーターとしてリストを使用する場合にリストの内容がどのように変化するかです。
まず、次のコード例を見てみましょう:
def add(x, lst=[]): if x not in lst: lst.append(x) return lst def main(): list1 = add(1) print(list1) list2 = add(2) print(list2) list3 = add(3, [11, 12, 13, 14]) print(list3) list4 = add(4) print(list4) main()
出力結果は次のようになると思われるかもしれません:
[1] [2] [11, 12, 13, 14, 3] [4]
しかし、実際には、このプログラムの出力結果は次のとおりです。は:
[1] [1, 2] [11, 12, 13, 14, 3] [1, 2, 4]
これはなぜですか?関数 add の機能は、x がリストにない場合に、リスト lst に x を追加することです。関数が初めて実行されるとき、パラメータ lst のデフォルト値 [] が作成されます。このデフォルト値は 1 回だけ作成されます。 add(1) は lst に 1 を加算します。 lst は 1 回しか作成されないため、関数が再度呼び出された場合、lst は [] ではなく [1] になります。パラメータの最初が [11,12,13,14] の場合、最初は [11,12,13,14] となります。 list4 が関数を呼び出すと、デフォルトのパラメーターが使用されるため、デフォルトのパラメーター lst は [1,2] になります。
呼び出し状況をよりよく理解するために、次のコードのように lst の ID を add 関数に出力できます。
def add(x, lst=[]): print(id(lst)) if x not in lst: lst.append(x) return lst def main(): list1 = add(1) print(list1) list2 = add(2) print(list2) list3 = add(3, [11, 12, 13, 14]) print(list3) list4 = add(4) print(list4) main()
出力結果は次のとおりです。
4469603648 [1] 4469603648 [1, 2] 4469670472 [11, 12, 13, 14, 3] 4469603648 [1, 2, 4]
list1、list2 を見ると、 list4 が呼び出されたときにデフォルト パラメーターの ID は変更されていませんが、 list3 の ID は変更されていることがわかります。
これはリストをデフォルトパラメータとして使用する Python の落とし穴です。では、落とし穴に陥らないようにするにはどうすればよいでしょうか?関数が呼び出されるたびに [] であるデフォルトのリストを使用したい場合は、次のプログラムのように関数のパラメーターを変更できます。
def add(x, lst=None): if lst is None: lst = [] if x not in lst: lst.append(x) return lst def main(): list1 = add(1) print(list1) list2 = add(2) print(list2) list3 = add(3, [11, 12, 13, 14]) print(list3) list4 = add(4) print(list4) main()
出力結果は次のとおりです。
[1] [2] [11, 12, 13, 14, 3] [4]
以上が関数のデフォルトパラメータとしてリストを使用する Python の紹介 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。