[EMAIL PROTECTED] writes: > file1.py > ---------- > a = 20 > from abc import * > print "Should this be printed when 'a' is alone imported from this > module" > > file2.py > ---------- > from file1 import a > print a > > file2.py is used in a context where 'from abc import *' statement > doesn't make sense but it can make sense of (and requires) 'a'. > But it seems we can't import just a part of the module and expect the > rest to not be executed. > Executing python file2.py executes the 'from abc ...' and the print > statement following it in file1.py.
That's right. That's what 'import' is documented to do. Import statements are executed in two steps: (1) find a module, and initialize it if necessary; (2) define a name or names in the local namespace … … to ``initialize'' a Python-coded module meansto execute the module's body. <URL:http://docs.python.org/ref/import.html> > Can't I just import 'a' into this name scope without touching the > rest of the statements in the module (file1 in this case). If so, > what the rationale behind such logic in the module 'import' > mechanism of python? The purpose of dividing code into separate modules is to have all the code in those modules executed by an 'import' statement. If you want some code to be executed under some circumstances and other code not executed, they need to be separated somehow. > Don't I have any solution other than packaging those parts in > file1.py (a = 20 and the rest of the statements) into different > modules? Let me turn that around: What are you actually trying to do, and how does that conflict with separating code that seems (from your description) conceptually separate anyway? One possible answer could be to define a module-level function. This would mean that at 'import' time, the 'def' statement is executed and the function defined, but the code inside it is not executed until you call the function at some later time. This also has the beneficial effect of defining a specific interface for using that code. Whether that's appropriate to your situation is impossible to say without knowing what you are trying to do. -- \ “Never do anything against conscience even if the state | `\ demands it.” —Albert Einstein | _o__) | Ben Finney -- http://mail.python.org/mailman/listinfo/python-list