Je suis confus au sujet de l'espace de noms et la portée des variables en pythoncomment accéder à la variable globale dans la portée __main__?
Supposons que j'ai un test.py:
# -*- coding: utf-8 -*-
"""
@author: jason
"""
if __name__ == '__main__':
global strName
print strName
puis, je définir une variable nommée strName et essayez d'accéder dans la test.py, mais il renvoie une erreur:
In [9]: strName = "Joe"
In [10]: run test.py hello
--------------------------------------------------------------------------- NameError Traceback (most recent call last) C:\Anaconda\lib\site-packages\IPython\utils\py3compat.pyc in execfile(fname, glob, loc)
195 else:
196 filename = fname
--> 197 exec compile(scripttext, filename, 'exec') in glob, loc
198 else:
199 def execfile(fname, *where):
d:\playground\test.py in <module>()
13 print "hello"
14 global strName
---> 15 print strName
16
NameError: global name 'strName' is not defined
In [11]:
Je me demandais pourquoi cela se produit et est-il possible d'accéder à strName test.py?
a. Vous ne définissez pas '' strName''. b. Vous devez importer '' test''. Par exemple: '' from import import strName'' –
Les instructions 'if' ne créent pas de nouvelle portée (et' global' n'a pas de sens dans une portée de module). – user2864740