ホームページ > バックエンド開発 > Python チュートリアル > 関数のデフォルトパラメータとしてリストを使用する Python の紹介 (コード例)

関数のデフォルトパラメータとしてリストを使用する Python の紹介 (コード例)

不言
リリース: 2019-01-28 10:22:40
転載
2901 人が閲覧しました

この記事では、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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート