2017-10-17 2 views
0

Je pensais que cette variable ne peut être accessible qu'après sa déclaration. Mais apparemment, la résolution du nom de Python commence à chercher de l'intérieur vers l'extérieur.Définir une variable après une fonction interne est une mauvaise pratique?

Ma question est que c'est une mauvaise pratique en termes de lisibilité? Je me demandais que cela pourrait être une connaissance commune pour Pythonista afin que je puisse écrire ce genre de code à partir de maintenant.

def outer(): 
    def inner(): 
     print x 
    x = ‘foo’ 
    inner() 
>>> outer() 
>>> ‘foo’ 
+0

Vous avez raison, cette méthode est déclarée avant de définir 'x' mais elle n'est évaluée que si vous appelez réellement la méthode (' inner() ') et à ce stade' x' est défini. –

+0

Merci! Est-ce une mauvaise pratique? – steve

+0

Cela me rappelle un peu les getters et les setters (https://stackoverflow.com/questions/2627002/whats-the-pythonic-way-to-use-getters-and-setters) Je suppose que cela dépend de la raison pour laquelle vous voulez fais comme ça. Vous ne pouvez pas dire en soi que c'est une mauvaise pratique. –

Répondre

0

Lorsque vous invoquez inner(), il commence à exécuter. Sur la ligne print x, il voit le nom de variable x. Alors il regarde à la portée interne de la fonction inner, ne trouve pas la variable x là. Ensuite, il regarde à la portée extérieure, à savoir, portée de outer. A ce moment, la variable x est déjà définie (comme c'est le cas avant inner() invocation) et cette variable est utilisée.

+0

Merci! Je comprends comment python cherche la variable. Est-ce une connaissance commune pour Pythonista? En d'autres termes, je me demande si cela pourrait être une mauvaise pratique en termes de lisibilité. Devrais-je définir une variable avant la fonction? – steve

+0

Oui, vous pourriez appeler cela "connaissance commune". Tout programmeur Python non novice devrait être capable de regarder votre code et de comprendre ce qui se passe. – alexis