Portée des variables

Fermé
pierrot18200 Messages postés 5 Date d'inscription mardi 7 janvier 2014 Statut Membre Dernière intervention 19 septembre 2016 - 9 janv. 2014 à 19:35
pierrot18200 Messages postés 5 Date d'inscription mardi 7 janvier 2014 Statut Membre Dernière intervention 19 septembre 2016 - 10 janv. 2014 à 09:07
Bonjour,

On lit dans les manuels que les variables définies au niveau principal du programme ne peuvent pas être modifiées par les fonctions.

Or dans le code simplissime suivant, la variable var définie au niveau principal est modifiée par la fonction function()


>>> var = [1]
>>> def function():
var[0] = 2

>>> var
[1]
>>> function()
>>> var
[2]
>>>

La variable est particulière certes, et l'instruction qui la modifie n'est pas une instruction d'affectation certes. Mais cela contredit ce qu'on lit dans les manuels non ?

Pierre


2 réponses

Utilisateur anonyme
9 janv. 2014 à 21:06
Bonjour

Je ne suis pas spécialiste en Python, mais il me semble bien que ta variable n'est pas locale : elle est définie à la racine. et comme le type liste est modifiable, la fonction modifie effectivement la liste.
https://python.sdv.univ-paris-diderot.fr/#SECTION000135000000000000000
0
pierrot18200 Messages postés 5 Date d'inscription mardi 7 janvier 2014 Statut Membre Dernière intervention 19 septembre 2016
Modifié par pierrot18200 le 10/01/2014 à 09:09
"""Je ne suis pas spécialiste en Python, mais il me semble bien que ta variable n'est pas locale : elle est définie à la racine. """

C'est bien ce que j'ai dit. La racine ou le niveau principal c'est la même chose. Je te remercie pour ce lien, il me sera sûrement utile.

J'ai trouvé la réponse à mon questionnement métaphysique ici :

http://fr.openclassrooms.com/informatique/cours/apprenez-a-programmer-en-python/la-portee-des-variables-2

Il est effectivement faux, ou incomplet, de dire que les variables définies au niveau principal du programme ne peuvent pas être modifiées par les fonctions. Il faut dire :
une fonction ne peut modifier, par affectation, la valeur d'une variable extérieure à son espace local.
0