Bon, j'avance dans la doc et les petits tests en console (super pratique, la console, ça change des heures de settings pour les compilateurs
)
Là je viens de lire un truc qui me trouducute quand même un peu :
L'exécution d'une fonction introduit une nouvelle table de symboles utilisée par les variables locales de la fonction. Plus précisément, toutes les affectations de variables effectuées au sein d'une fonction stockent la valeur dans la table de symboles locale ; en revanche, les références de variables sont recherchées dans la table de symboles locale, puis dans la table de symboles locale des fonctions englobantes, puis dans la table de symboles globale et finalement dans la table de noms des primitives
Ca veut dire... qu'une variable X dans une fonction masquera la variable X de la fonction appelante, mais que la variable X de la fonction appelante sera visible si elle n'est pas redéfinie dans la fonction appelée ??
C'est moi ou c'est casse-cou, error-prone, et contre toute notion de privatisation et de protection de données en général (encapsulation par exemple) ?
Sauce :
https://docs.python.org/fr/3.8/tutorial/controlflow.html#defining-functionsedit -> ah ben non :
>>> def func1():
... x = 1
... func2()
...
>>> def func2() :
... print(x + 1)
...
>>> func1()
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in func1
File "<stdin>", line 2, in func2
NameError: name 'x' is not defined
Bon ben je raconte que de la mayrde et j'ai rien compris à leur formulation
Mais au moins, ça me parait plus naturel