Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision |
other:python:jyp_steps [2016/02/09 16:32] – Added the views side effect section jypeter | other:python:jyp_steps [2016/02/23 11:03] – Added links to Numexpr and PyTables jypeter |
---|
| |
* [[http://blog.codinghorror.com/a-pragmatic-quick-reference/|A Pragmatic Quick Reference]] | * [[http://blog.codinghorror.com/a-pragmatic-quick-reference/|A Pragmatic Quick Reference]] |
| |
| ===== Debugging your code ===== |
| |
| There is only so much you can do with staring at your code in your favorite text editor, and adding ''print'' lines in your code (or using [[https://docs.python.org/2/howto/logging.html#logging-basic-tutorial|logging]] instead of ''print''). The next step is to **use the python debugger**! |
| |
| ==== Debugging in text mode ==== |
| |
| - Start the script with: ''python -m pdb my_script.py'' |
| - Type ''run'' (or **r**) to go to the first line of the script |
| - Type ''continue'' (or **c**) to execute the script to the end, or till the first breakpoint or error is reached |
| - Use ''where'' (or **w**) to check the call stack that led to the current stop. Use ''up'' and ''down'' to navigate through the call stack and examine the values of the functions' parameters |
| - Type ''break NNN'' to stop at line NNN |
| - Use ''type(var)'' and ''print var'' to check the type and values of variables. You can also change the variables' values on the fly! |
| - Type ''run'' (or **r**) to restart the script |
| - Use ''next'' and ''step'' to execute some parts of the script line by line. If a code line calls a function: |
| * ''next'' (or **n**) will execute a function and stop on the next line |
| * ''step'' (or **s**) will stop at the first line **inside the function** |
| - Check the [[https://docs.python.org/2/library/pdb.html#debugger-commands|debugger commands]] for details, or type ''help'' in the debugger for using the built-in help |
| |
| ==== Using pydebug ==== |
| |
| Depending on the distribution, the editor and the programming environment you use, you may have access to a graphical version of the debugger. UV-CDAT users can use ''pydebug my_script.py'' |
| |
===== Improving the performance of your code ===== | ===== Improving the performance of your code ===== |
| |
Hint: before optimizing your script, you should spent some time //profiling// it, in order to only spend time improving the slow parts of your script | Hint: before optimizing your script, you should spent some time //profiling// it, in order to only spend time improving the slow parts of your script |
| |
| ==== Useful packages ==== |
| |
| * [[https://github.com/pydata/numexpr|Numexpr]]: //Numexpr is a **fast numerical expression evaluator for NumPy**. With it, expressions that operate on arrays (like "3*a+4*b") are accelerated and use less memory than doing the same calculation in Python.// |
| * [[http://www.pytables.org/|PyTables]]: //PyTables is a package for managing hierarchical datasets and designed to efficiently and **easily cope with extremely large amounts of data**// |
| |
==== Tutorials by Ian Osvald ==== | ==== Tutorials by Ian Osvald ==== |