hello,

I do agree that circular references should preferable be avoided.

In languages like Delphi, you get an error message, trying to use circular references, but solving them in large programs with a lot of history can be very painful.

Now I finally (after 2 years) knowing there's a difference between modules and scripts,
I want to guarantee that I always get the same functional behavior.

I found 2 solutions to realize the above.

=== solution 1 ===
Inserting a launcher into the IDE,
so instead of running the application as a script,
the file will always be executed as a module.
"""
== Launcher ==
instead of
  if __name__ == '__main__' :
define a function
  def main () :
and start this Launcher with the first parameter being the name of the module
  Launcher <module to be tested>  <other arguments>
"""

import sys
__My_Main_Application = __import__ ( sys.argv[1] )

if 'main' in dir ( __My_Main_Application ) :
 __My_Main_Application.main ()



=== solution 2  ===
Prevent execution of the code in this file if the file is ran as a script.
if __name__=='__main__':
 import os, sys

 # determine the name of myself
 a = sys._getframe().f_code.co_filename
 X = os.path.splitext ( os.path.split(a)[1] ) [0]

 #import myself as 'ME'
 ME = __import__ ( X )

 # run some code in myself
 ME.functional_code ()

 # prevent that the code below is executed,
 # ( for the second time )
 # if this file is used as a script
 sys.exit()

print 'One time import code'
def functional_code () :
 print 'Functional Code'



any comment ?
thanks,
Stef Mientki
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to