question on "import __main__"

Robert Kern rkern at ucsd.edu
Fri Aug 26 17:00:41 CEST 2005


wen wrote:
> i have written some code in test.py as below:
> import __main__
> if __name__!='__main__':
>    print 1
> 
> print 2
> 
> when i run test.py, i got
> 2
> on the screen.
> 
> now, i have some question about the code, 1. since no __main__ module at
> all, why it's legal to write "import __main__"?

Because a module object is created for the running script. It is placed
in sys.modules with the name "__main__". When you "import __main__", the
import mechanism looks in sys.modules first for a module with the name
"__main__" and uses that if it's there.

> 2. since if running a script independently, the __name__ should be
> '__main__', why it's not in the above code?

It is. However, you wrote "!=" instead of "==".

-- 
Robert Kern
rkern at ucsd.edu

"In the fields of hell where the grass grows high
 Are the graves of dreams allowed to die."
  -- Richard Harter




More information about the Python-list mailing list