[IDLE] [espace de noms] [variable globale] [fonction]
Bonjour à tout le monde,
J’ai un soucis avec un résultat inattendu lorsque j’exécute une fonction dans l’interpréteur.
Je dois passer à côté de quelque chose, je pense que c’est lié aux espaces de noms mais je ne comprends pas…
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
# -*- coding:Utf-8 -*-
a=9999
def monter():
global a
a=a+1
print("a")
print(a)
print(id(a))
def setA():
global a
a=10
print("a")
print(a)
print(id(a))
if __name__ == "__main__":
print(globals())
print("a")
print(a)
print(id(a))
print("-------")
print("setA")
setA()
print("-------")
print("a")
print(a)
print(id(a))
print("-------")
print("monter")
monter()
print("-------")
print("a")
print(a)
print(id(a))
print("-------") |
En exécutant le code (main), j’obtiens le résultat suivant (qui est correct):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001CF9F772640>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'test.py', '__cached__': None, 'a': 9999, 'monter': <function monter at 0x000001CF9FCC7CA0>, 'setA': <function setA at 0x000001CF9FCC7E50>}
a
9999
1991250639312
-------
setA
a
10
140704708233152
-------
a
10
140704708233152
-------
monter
a
11
140704708233184
-------
a
11
140704708233184
------- |
La variable globale est bien modifiée.
Maintenant dans l’interpréteur:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
Python 3.8.6rc1 (tags/v3.8.6rc1:08bd63d, Sep 7 2020, 23:10:23) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from test import setA, monter, a
>>> print(globals())
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'setA': <function setA at 0x0000018AC4F07EE0>, 'monter': <function monter at 0x0000018AC4F07E50>, 'a': 9999}
>>> print(a)
9999
>>> setA()
a
10
140704708233152
>>> print(a)
9999 |
La variable globale n’est pas modifiée. Pourquoi 999 et pas 10 ?
Merci d’avance pour votre aide