Appel de fonction avec des objets en paramètre : list-set-dict-numpy.array (3/4)

ComplémentGestion des variables : référence

En python, une variable est une référence[1] à un emplacement mémoire. A chaque fois qu'un variable apparait à gauche du signe = une nouvelle référence est créée.

Lors de l'appel à une fonction, c'est la référence à l'argument qui est copiée dans le paramètre.

ExempleAppel d'une fonction

1
def f2(dd):
2
    print ("    Reference du parametre ", id(dd))
3
    dd = 10
4
    print ("    Nouvelle Reference du parametre ", id(dd))
5
    return 
6
7
x = 28
8
print("reference de l'argument ", id(x))
9
f2(x)

Dans l'exemple précédent, la référence de la variable x et de dd sont identiques. Dés que dd est à gauche du signe égal, une nouvelle référence est créée.

ExempleAppel d'une fonction avec une liste en argument

1
def f2(lt):
2
    lt.append(28)
3
    return lt
4
5
l =[17,32]
6
print("l avant l'appel = ", l)
7
f2(l)
8
print("l après l'appel = ", l)

La référence de lt est la liste l. La liste lt n'est jamais à gauche du signe =. Les modifications de lt dans la fonction se répercutent donc dans le programme principal

ExempleAppel d'une fonction avec un set (ensemble), ou un dict (liste associative)

1
def f2(dd):
2
    dd["Maine_et_Loire"] = 49
3
    return 
4
5
dept = {'Sarthe' : 72, "Mayenne" : 53}
6
dept["loire_Atlantique"] =  44
7
print("dept avant l'appel = ", dept)
8
f2(dept)
9
print("dept après l'appel = ", dept)

Même chose avec une liste associative : les modifications du paramètre de type dict dans la fonction se répercutent donc dans le programme principal

1
def f2(dd):
2
    dd.update(['Maine_et_Loire'])
3
    return 
4
5
dept = {'Sarthe','Mayenne'}
6
dept.update(['loire_Atlantique'])
7
print("dept avant l'appel = ", dept)
8
f2(dept)
9
print("dept après l'appel = ", dept)

Même chose avec un ensemble : les modifications du paramètre de type se dans la fonction se répercutent donc dans le programme principal