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…
En exécutant le code (main), j’obtiens le résultat suivant (qui est correct):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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("-------")
La variable globale est bien modifiée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 -------
Maintenant dans l’interpréteur:
La variable globale n’est pas modifiée. Pourquoi 999 et pas 10 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Merci d’avance pour votre aide
Partager