On 05Jul2018 19:56, Sharan Basappa <sharan.basa...@gmail.com> wrote:
I have implemented my first program in python that uses ML to do some classification task. The whole code is in a single file currently.
It contains executable code as well as functions.

I presume when you write "executable code" you mean some kind of "main program" that just runs when you run the .py file?

At the end of the program, I have series of calls that is used to test my code.
Now, I would like to re-structure this to separate test code from the program.
As I have not done this in Python, I am a bit lost.

Please let me know if the following understanding of mine is correct.
I need to put the program code in a separate file and organize every executable 
code in some form of function. If any code exists outside of function then it 
is not executable by importing.

This is not quite right. Because Python is a dynamic language, importing a file actually runs it. That is how the functions etc get defined.

So what you need to do is arrange that your "series of calls that is used to test my code" live in their own function, and that that function only gets run if the file is directly run.

Fortunately, this is a very common, almost universal, requirement and there is a standard idom for arranging it.

Support you have your code in the file "foo.py" (because I need a concrete filename for the example). It might look like this at present:

 def func1(...):

 def func2(...):

 x = func1(...)
 y = func2(...)
 print(x + y)

i.e. some function definitions and then you testing code.

Now, you can write another file "foo_tests.py" which starts like this:

 import foo
 ... run some tests of foo.func1, foo.func2 etc ...

The issue is that as written, foo.py will run your test calls during the import. Restructure foo.py like this:

 def main():
     x = func1(...)
     y = func2(...)
     print(x + y)

 def func1(...):

 def func2(...):

 if __name__ == '__main__':
     main()

This is very standard. When you run a python file directly the built in __name__ variable contains the string "__main__". This tells you that you're running it as a "main program" i.e. directly.

If you import the file instead, as from your planned testing file, the __name__ variable will contain the string "foo" because that is the name of the module.

So that "main" function and the "if" at the bottom is standard Python boilerplate code for what you're trying to do.

Import this in my test program (file/module) and then initiate calls present in the program.
If there is some simple example, it would help a lot.

Now you can do this part.

Cheers,
Cameron Simpson <c...@cskk.id.au>
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to