[TriLUG] making a python module

Joseph Mack NA3T jmack at wm7d.net
Sat Feb 9 15:50:55 EST 2008


On Sat, 9 Feb 2008, Michael Hrivnak wrote:

Thanks for the reply

> Quick point: what you are calling "main()" looks to just be the global
> namespace.

OK. I haven't got the lingo yet.

> When importing from a file, things in the global namespace 
> get executed.

so if module volume has function volume_sphere() as well as 
the global namespace code that I originally used to test 
volume_sphere() when I wrote volume_sphere(), then when I 
import volume_sphere() from module volume, the global 
namespace code will be imported too and will be run? I would 
have expected I'd just import volume_sphere() and the global 
namespace code in module volume would be ignored.

> I'm not sure what you mean by wanting people to test your 
> function without writing calling code.  Maybe this would 
> suffice:

in other languages I've used in the past (probably one or 
both of C++, Java, but it's been a while) you write and test 
your functions one at a time like this.

#file volume.mylanguage
function volume_sphere()
.
.
#end volume_sphere

main()
#code to test volume_sphere()
print volume_sphere(4)
print volume_sphere(5)
#end main.

After testing, you throw this code into your library 
directory and call volume_sphere(). main() in file 
volume.mylanguage will be ignored, since you didn't start 
execution there. However any time you want go back and test 
volume_sphere(), you can execute the file volume.mylanguage 
using main() in the file, and see that volume_sphere() 
passes it's original tests. You don't have to write any 
external test code for the file - you leave the test code 
from when you wrote the function.

> -----------
> #!/usr/bin/python
> #volume_sphere.py
> def volume_sphere(r):
> 	do_magic_stuff(r)
> 	return volume_sphere
> ----------
>
> ----------
> tester at hisorhermachine:~$ python -i volume_sphere.py
>>>> volume_sphere(4)
> 268.0825731063467
>>>>
> tester at hisorhermachine:~$
> ---------

I see. I'm not used to running code from the command line. 
You're running volume_sphere() from its module without a 
main(). I'm writing files to import volume_sphere() from 
volume.py. I'll give your method a whirl.

> The tester still has to call the function, but nothing 
> more.  Or, you could simply write a small program that 
> takes input from the user and calls volume_sphere().

I'm writing a small file that imports and runs 
volume_sphere() and it's working fine. I just have to 
delete/comment out the original global namespace code that I 
used to first test volume_sphere(). I'd like to leave it in 
there to run tests later if ever I need too.

Thanks Joe
-- 
Joseph Mack NA3T EME(B,D), FM05lw North Carolina
jmack (at) wm7d (dot) net - azimuthal equidistant map
generator at http://www.wm7d.net/azproj.shtml
Homepage http://www.austintek.com/ It's GNU/Linux!



More information about the TriLUG mailing list