I put a method in a file mymodule.py:
def do_something():
global a
a=1
If I try
>>> execfile('mymodule.py')
>>> do_something()
>>> print a
I get "1" as I expect. But if I import the module instead,
>>> from mymodule import *
and then run do_something(), then the python session knows nothing about the variable "a".
Can anyone explain the difference to me? Thanks.
execfile
without globals
, locals
argument, It executes the file content in the current namespace. (the same namespace that call the execfile
)
While, import
execute the specified module in a separated namespace, and define the mymodule
in the local namespace.
In the second part where you import mymodule
, the reason why it isn't showing up is that a
is global to the namespace of mymodule
as done that way.
Try:
print mymodule.a
This prints:
1
As expected.
As per the Python documentation :
The global statement is a declaration which holds for the entire current code block. It means that the listed identifiers are to be interpreted as globals. It would be impossible to assign to a global variable without global, although free variables may refer to globals without being declared global.
Names listed in a global statement must not be used in the same code block textually preceding that global statement.
Names listed in a global statement must not be defined as formal parameters or in a for loop control target, class definition, function definition, or import statement.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.