J'ai raté plusieurs fois lors de l'implémentation avec python, alors faites-en une note pour moi-même. Il est compréhensible que ce code renvoie le résultat suivant.
x = 1
def func1():
print(x)
def func2():
x = "hoge"
print(x)
func1()
func2()
>>> 1
>>> hoge
En python, lors du référencement d'une variable, il fait référence à la portée globale si elle n'est pas déclarée dans la portée locale.
De plus, si la variable n'est pas déclarée avant de réécrire la variable dans la portée locale, une erreur est renvoyée.
def func3():
y += 1
y = 5
print(y)
func3()
>>> Traceback (most recent call last):
>>> File "/test.py", line 8, in <test>
>>> func3()
>>> File "/test.py", line 4, in func3
>>> y += 1
>>> UnboundLocalError: local variable 'y' referenced before assignment
Je l'ai compris jusqu'à présent, mais lorsque des variables globales ont été impliquées, j'ai été immédiatement confus. En d'autres termes, lors de la manipulation d'une variable déclarée en tant que variable globale, elle doit être explicitement déclarée et une erreur est normalement renvoyée.
x = 1
def func4():
x += 1 #À ce stade, x ne peut pas encore être référencé
x = 5 #La variable x est ajoutée à la portée locale à ce stade
print(x)
func4()
>>> Traceback (most recent call last):
>>> File "/test.py", line 8, in <test>
>>> func4()
>>> File "/test.py", line 4, in func4
>>> x += 1
>>> UnboundLocalError: local variable 'x' referenced before assignment
La solution est simple, et lorsque vous utilisez des variables globales, précisons qu'il s'agit de variables globales.
x = 1
def func5():
global x #Être explicitement une variable globale
x += 1
print(x)
def func6():
x = 10 #Être explicitement une variable locale
x += 1
print(x)
func5()
func6()
>>> 2
>>> 11