From Healthcare Robotics Wiki
HRL Coding Standards
In general, we strongly recommend that everyone follow the official python coding standards (Python standards) but we will summarize here the relevant key points.
- Every indent is 4 spaces, replace all tabs with spaces.
- Don't use 'from blah_module import *'
- imported names must be longer than 1 character.
- all imports should be at the top of your file except for..
- imports that are only used in your __main__ blocks should be at the beginning of that __main__ block.
- ClassName, method_name, _private_name
- Use default parameters sparingly.
- Use classes sparingly, please try to define functions whenever possible. Functions should not be more than a page or two long unless there is an extremely good reason to do so.
- Instead of using inheritance, use duck typing (i.e. define interfaces based on conventions)
- With numpy, use matrices instead of arrays, all vectors should be column vectors.
- Debugging printouts that are left in the code should be annotated with the class and method name that is generating it. Instead of:
def some_func(a,b): print "results of a + b", a+b
def some_func(a,b): print "<my_file.py> some_func: results of a+b
- We use doxygen styled comments:
## # some comments # @param a is 3x1 point in coordinate frame C # @param b is a 3x3 rotation matrix # @return a 3x1 vector rotated by b def my_function(a, b): return b*a
- Use whitespace to separate functional parts of code, but do not use them misleadingly. This is misleading:
self.size_image = highgui.cvQueryFrame(self.capture) self.size = cv.cvGetSize( self.size_image )
self.color = cam_param['color']
self.intrinsic_cvmat = cv.cvCreateMat(3,3,cv.CV_32FC1) self.distortion_cvmat = cv.cvCreateMat(1,4,cv.CV_32FC1)
The below would be preferred if there are not obvious separations:
self.size_image = highgui.cvQueryFrame(self.capture) self.size = cv.cvGetSize( self.size_image ) self.color = cam_param['color'] self.intrinsic_cvmat = cv.cvCreateMat(3,3,cv.CV_32FC1) self.distortion_cvmat = cv.cvCreateMat(1,4,cv.CV_32FC1)
- Again, we strongly recommend that you be extremely familiar with the python coding standards: Python standards
- We follow the Python coding standards.
- python for programmers
- guido's guide (http://docs.python.org/tut/)
- dive into python (book) (http://www.diveintopython.org/toc/index.html)
- quick reference (http://rgruet.free.fr/PQR25/PQR2.5.html)
- ipython (http://ipython.scipy.org/moin/)
- to execute a script in ipython, type: run [script name]
math, science, numerical, etc.
- numpy (http://numpy.scipy.org/)
- scipy (http://scipy.org/)
- matplotlib (http://matplotlib.sourceforge.net/): in ipython shell
- mayavi (http://code.enthought.com/projects/mayavi/)
- When you need buffering of some sort for logging/writing data, if speed is important use the deque data structure instead of lists: http://docs.python.org/library/collections.html#collections.deque
Call Matlab from Python
- mlabwrap - Use this to easily call Matlab from within Python. Useful for computer vision libraries, displays, or the signal processing toolkits among the other functions which make Matlab really useful. Interoperates well with Numpy matricies.