D'après ce que j'ai compris, Python dispose d'un espace de noms distinct pour les fonctions, donc si je veux utiliser une variable globale dans une fonction, je devrais probablement utiliser global
.
Cependant, j'ai été en mesure d'accéder à une variable globale même sans global
:
>>> sub = ['0', '0', '0', '0']
>>> def getJoin():
... return '.'.join(sub)
...
>>> getJoin()
'0.0.0.0'
Est-ce que je rate quelque chose ? En outre, ce qui suit est tiré de la documentation Python :
Noms listés dans une déclaration globale ne doivent pas être définis comme des paramètres formels ou dans une boucle de contrôle for cible, définition de classe, fonction ou une déclaration d'importation.
Si les paramètres formels et la définition de la classe me paraissent logiques, je ne comprends pas la restriction concernant la cible de contrôle de la boucle for et la définition de la fonction.
2 votes
Je pense que vous confondez avec php qui requiert l'utilisation du mot-clé global - les docs de python le confirment - en gros, si ce n'est pas défini dans le contexte local, c'est traité comme global.
14 votes
Faites attention à votre formulation : Python n'a pas d'espace de nom séparé pour les fonctions (cela signifierait que vous pourriez avoir
def foo(): ...
yfoo = ...
en même temps). Il crée une nouvelle portée pour chaque appel de fonction. (Mais en quoi cela est-il différent d'à peu près tous les autres langages de haut niveau éloignés dans le monde).