I have been a Python Scientific Programmer for a few years now, and I find myself coming to a sort specific problem as my programs get larger and larger. I am self taught so I h
Another approach is to make a util
package and split up your functions into different modules within that package. The basics of packages: make a directory (whose name will be the package name) and put a special file in it, the __init__.py
file. This can contain code, but for the basic package organization, it can be an empty file.
my_package/
__init__.py
module1.py/
modle2.py/
...
module3.py
So say you are in your working directory:
mkdir util
touch util/__init__.py
Then inside your util
directory, make calc_funcs.py
def add(a,b):
return a + b
def sub(a,b):
return a -b
And format_funcs.py
:
def cap(string):
return string.title()
def lower(string):
return string.lower()
And now, from your working directory, you can do things like the following:
>>> from util import calc_funcs
>>> calc_funcs.add(1,3)
4
>>> from util.format_funcs import cap
>>> cap("the quick brown fox jumped over the lazy dog")
'The Quick Brown Fox Jumped Over The Lazy Dog'
Notice, though, if we restart the interpreter session:
>>> import util
>>> util.format_funcs.cap("i should've been a book")
Traceback (most recent call last):
File "", line 1, in
AttributeError: module 'util' has no attribute 'format_funcs'
This is what the __init__.py
is for!
In __init__.py
, add the following:
import util.calc_funcs, util.format_funcs
Now, restart the interpreter again:
>>> import util
>>> util.calc_funcs.add('1','2')
'12'
>>> util.format_funcs.lower("I DON'T KNOW WHAT I'M YELLING ABOUT")
"i don't know what i'm yelling about"
Yay! We have flexible control over our namespaces with easy importing! Basically, the __init__.py
plays an analogous role to the __init__
method in a class definition.