J'avais une vague compréhension de la portée des variables dans une fonction en Python, je vais donc la partager pour tous ceux qui sont tombés sur quelque chose de similaire. Ce que je voudrais dire, c'est que pour une variable préparée en tant qu'argument de la fonction __, lorsqu'une affectation complète est faite à cette variable, elle est traitée comme si une nouvelle variable locale était définie, et lorsqu'une affectation est faite à un élément de la variable. Veuillez noter qu'il y a une différence qu'elle est traitée comme une variable globale car elle est __.
Dans le code ci-dessous, nous manipulons deux listes list_a et list_b à l'intérieur de la fonction, mais seule list_b est traitée comme une variable globale et a un effet en dehors de la fonction.
def func(list_a, list_b):
list_a = list_a + ['hoge']
list_b[1] = list_b[1] + 10
a = [1, 2, 3]
b = [5, 6, 7]
func(a, b)
print(f"a={a}, b={b}")
func(a, b)
print(f"a={a}, b={b}")
La sortie sera:
a=[1, 2, 3], b=[5, 16, 7]
a=[1, 2, 3], b=[5, 26, 7]
En Python, les expressions de la forme "a = ..." dans une fonction sont traitées comme une variable locale nouvellement définie a qui n'a une portée que dans la fonction __. Par conséquent, dans list_a = list_a + ['hoge'] de la fonction func, list_a sur le côté gauche est traité comme une nouvelle définition de la variable locale list_a (list_a sur le côté droit est donné comme argument de la fonction et est en dehors de la fonction. Est également une variable de portée). Par conséquent, cela n'a aucun effet sur l'extérieur de la fonction.
Par contre, pour list_b [1] = list_b [1] + 10, list_b [1] des deux côtés doit être traité comme le premier élément de __ déjà défini __variable list_b. Dans cet exemple, list_b est un argument de la fonction func, une variable déjà définie en dehors de la fonction. Par conséquent, le traitement par func se reflète dans la variable b en dehors de la fonction.
Il en va de même pour les variables d'autres types tels que ndarray et pandas.DataFrame.
Recommended Posts