Ce que cet article vous apporte est une introduction à l'utilisation de listes comme paramètres par défaut dans les fonctions Python (exemples de code). Les amis dans le besoin peuvent s'y référer.
Cet article présentera un piège de Python que l'auteur a rencontré au travail, qui utilise des listes comme paramètres par défaut.
Nous savons qu'en Python, les listes sont des objets mutables, donc le contenu de la liste peut changer au sein de la fonction. Une autre chose à noter est la façon dont le contenu de la liste change lors de l'utilisation d'une liste comme paramètre par défaut d'une fonction.
Tout d'abord, regardons l'exemple de code suivant :
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()
Vous pensez peut-être que le résultat de sortie sera :
[1] [2] [11, 12, 13, 14, 3] [4]
Mais en fait, le programme sorties Le résultat est :
[1] [1, 2] [11, 12, 13, 14, 3] [1, 2, 4]
Pourquoi est-ce ? La fonction de la fonction add est d'ajouter x à la liste lst lorsque x n'est pas dans la liste. Lorsque la fonction est exécutée pour la première fois, la valeur par défaut [] du paramètre lst est créée. Cette valeur par défaut ne sera créée qu'une seule fois. add(1) ajoute 1 à lst. Lorsque la fonction est à nouveau appelée, lst vaut [1] au lieu de [] car lst n'est créé qu'une seule fois. Lorsque la liste du paramètre est [11,12,13,14], la liste est [11,12,13,14]. Lorsque list4 appelle la fonction, les paramètres par défaut sont utilisés, donc le paramètre par défaut lst est maintenant [1,2].
Afin de mieux comprendre la situation d'appel, vous pouvez afficher l'identifiant de lst dans la fonction add, comme le code suivant :
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()
Le résultat de sortie est le suivant :
4469603648 [1] 4469603648 [1, 2] 4469670472 [11, 12, 13, 14, 3] 4469603648 [1, 2, 4]
Vous pouvez voir que l'identifiant du paramètre par défaut n'a pas changé lorsque list1, list2 et list4 sont appelés, mais l'identifiant de list3 a changé.
C'est un piège de Python utilisant des listes comme paramètres par défaut. Alors, comment éviter de tomber dans les pièges ? Si vous souhaitez utiliser la liste par défaut qui est [] à chaque fois que la fonction est appelée, vous pouvez modifier les paramètres de la fonction comme le programme suivant :
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()
Le résultat de sortie est le suivant :
[1] [2] [11, 12, 13, 14, 3] [4]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!