355 votes

Ce qui ' s la portée d’une variable de Python déclarée dans un if déclaration ?

Je suis nouveau sur Python, donc c'est probablement une simple détermination de la portée de la question. Le code suivant dans un fichier Python (module) est source de confusion m'a légèrement:

if __name__ == '__main__':
    x = 1

print x

Dans d'autres langues, j'ai travaillé en, ce code permettrait de lever une exception, comme l' x variable est locale à l' if déclaration et ne devraient pas exister en dehors d'elle. Mais ce code s'exécute, et imprime 1. Quelqu'un peut expliquer ce comportement? Sont toutes les variables créées dans un module global/disponible à l'ensemble de ce module?

421voto

Luke Maurer Points 1681

Variables de Python sont limitées à la fonction plus intime ou du module ; contrôler les blocs comme et blocs ne comptent pas. (IIUC, c’est aussi comment JavaScript `` -déclarée variables travail.)

146voto

Eli Bendersky Points 82298

Oui, ils sont dans la même portée « locale », et en fait code comme celui-ci est commun en Python :

Notez que `` n’est pas déclarée ou initialisé avant l’État, comme ce serait en C ou en Java, par exemple.

48voto

Daniel G Points 12647

Champ d'application en python suit cet ordre:

  • La recherche de la portée locale

  • De la recherche à la portée de tout joignant les fonctions

  • La recherche de la portée mondiale

  • La recherche de la built-ins

(source)

Notez que if et d'autres boucle/ramification des constructions ne sont pas répertoriés seulement les classes, les fonctions et les modules fournissent un champ d'application en Python, donc tout ce que déclaré dans une if bloc a la même portée que rien decleared à l'extérieur du bloc. Les Variables ne sont pas contrôlés au moment de la compilation, c'est pourquoi d'autres langues lever une exception. En python, tant que la variable existe au moment où vous en avez besoin, sans exception sera levée.

15voto

Skilldrick Points 33002

Comme Eli dit, Python ne nécessite pas de déclaration de variable. Dans C à vous dire:

int x;
if(something)
    x = 1;
else
    x = 2;

mais en Python déclaration est implicite, de sorte que lorsque vous affecter à x, il est automatiquement déclarée. C'est parce que Python est dynamiquement typé - il ne serait pas travailler dans un langage statiquement typé, parce que, selon le chemin d'accès utilisé, une variable peut être utilisée sans être déclaré. Ce serait pris au moment de la compilation dans un langage statiquement typé, mais avec un typées dynamiquement la langue c'est permis.

La seule raison pour laquelle une statiquement typé langage est limité à déclarer des variables en dehors de if des déclarations en raison de ce problème. Embrasser la dynamique!

14voto

Paul Stephenson Points 17507

Contrairement à des langages tels que C, une variable Python dans le champ de l'ensemble de la fonction (ou d'une classe ou d'un module) où il apparaît, et pas seulement dans les recoins les plus profonds de "bloc". C'est comme si vous avez déclaré int x sur le haut de la fonction (ou d'une classe ou d'un module), sauf qu'en Python, vous n'avez pas à déclarer les variables.

Veuillez noter que l'existence de la variable x est vérifié qu'à l'exécution-qui est, quand vous arrivez à l' print x déclaration. Si __name__ n'est pas égal à "__main__" ensuite, vous recevez une exception: NameError: name 'x' is not defined.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X