Difference between revisions of "Python"
From Healthcare Robotics Wiki
|Line 40:||Line 40:|
== learning python ==
== learning python ==
* We use the Python distributed with Ubuntu
* We use the Python distributed with Ubuntu 10.04 as of Feb 12, 2012 and code using the [http://www.python.org/dev/peps/pep-0008/ Python coding standards].
Revision as of 19:39, 12 February 2012
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 use the Python distributed with Ubuntu 10.04 as of Feb 12, 2012 and code using 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