简体   繁体   中英

python globals: import vs. execfile

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM