[[python]]
 

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

python [2012/12/26 12:15]
dblume [Python]
python [2013/03/13 21:52] (current)
dblume
Line 1: Line 1:
-====== Python ====== +{{indexmenu>.:python|js}}
- +
-Man, there's too much to do and note.  Logging some stuff to investigate later... +
- +
-  * [[http://pycon.blogspot.com/2011/12/announcing-pycon-2012-tutorials.html|2011 PyCon tutorials announcement]] further details at the [[https://us.pycon.org/2012/schedule/lists/tutorials/|tutorial list]]. +
-  * They mention using [[http://ipython.org/|IPython]] enhanced shell.  Hmm. +
-  * [[http://pytools.codeplex.com/releases/view/76089|Python Tools for Visual Studio 2010]]. +
-  * [[http://wiki.python.org/moin/PythonSpeed/PerformanceTips|Python Performance Tips at the Python wiki]]. +
-  * Of course, there's getting Python running under Xampp. [[xampp]] +
-  * There's [[http://www.infoworld.com/d/application-development/pillars-python-six-python-web-frameworks-compared-169442|A comparison of CubicWeb, Django, Pyramid, Web.py, Web2py, and Zope 2]] +
-  * Look into the microframework [[http://flask.pocoo.org/|Flask]]. Here's a [[http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world|tutorial on making a blog with it]]. +
- +
-Would be nice to create a binary search in text files in Python.  Maybe based on an answer deep in [[http://stackoverflow.com/questions/744256/reading-huge-file-in-python|Reading Huge File in Python]]. +
- +
-This [[http://stackoverflow.com/questions/231767/the-python-yield-keyword-explained/231855#231855|Explanation of Python "Yield"]] also mentions (at the bottom) explanations for decorators and metaclasses. +
- +
-Would be good to experiment with [[http://pingswept.org/2009/01/24/least-squares-polynomial-fitting-in-python/|least-squares polynomial fitting in Python]]. +
-===== Data Analysis ===== +
- +
-Looks like I should dive into: +
- +
-  * [[http://docs.scipy.org/doc/|NumPy]] +
-  * [[http://pandas.pydata.org/|Pandas]] +
-  * [[http://ipython.org/|IPython]].  (As seen above.) +
-===== Template Files to Start With ===== +
- +
-You have some template files in svn: +
- +
-<code> +
-/Code/python_templates/trunk/make_standalone_application.bat +
-/Code/python_templates/trunk/setup.py +
-/Code/python_templates/trunk/template_cron_job.py +
-/Code/python_templates/trunk/template_gui_app.py +
-/Code/python_templates/trunk/template_gui_app_with_worker_thread.py +
-</code> +
- +
-===== Linux or Bash Tips ===== +
- +
-Useful bash command for finding strings within python files... +
- +
-<code bash> +
-find . -name \*.py -type f -print0 | xargs -0 grep -nI "timeit" +
-</code> +
- +
-Interesting way to use ''grep -v'' to remove paths from a list generated by ''find''.  Not sure about the escaped ''|'' character, though... +
- +
-<code bash> +
-#!/bin/bash +
-find $PWD -regex ".*\.[hcHC]\(pp\|xx\)?" | \ +
-    grep -v " \|unwantedpath/unwantedpath2\|unwantedpath3" > cscope.files +
-cscope -q -b +
-</code> +
- +
-And these two have nothing to do with Python.  Here's how to find if a symbol is in a library, and how to search lots of object files and print the filename above the search... +
- +
-<code bash> +
-nm obj-directory/libmyobject.a | c++filt | grep Initialize_my_obj +
-find bindirectory/ -name \*.a -exec nm /dev/null {} \; 2>/dev/null | \ +
-    c++filt | grep -P "(^bindirectory.*\.a|T Initialize_my_obj)" +
-</code> +
- +
-Also handy to merge two streams together... +
- +
-<code bash> +
-( cat file1 && cat file2 ) | sort +
-</code> +
- +
-When a little quick math is needed, use ''bc'' +
-<code bash> +
-$ bc <<< "obase=16;ibase=10;15" +
-+
-$ bc -l <<< 1/3 +
-.33333333333333333333 +
-$ bc <<< "scale=2; 1/3" +
-.33 +
-$ bc <<< "obase=10;ibase=16;B" +
-11 +
-</code> +
- +
-and, when coverting from hex to dec... +
- +
-<code bash> +
-echo $((0x2dec)) +
-</code> +
- +
-But, then again, does that really seem easier than, +
- +
-<code> +
-python -c "print int('B',16)" +
-</code> +
- +
-There's a bash way to calculate how many days ago a date was: +
- +
-<code bash> +
-$ echo $(( ($(date +%s) - $(date -d "2012-4-16" +%s)) / 86400 )) +
-</code> +
- +
-And a Python way... +
- +
-<code python+
-python -c "import datetime; print (datetime.date.today() - datetime.date( 2012, 4, 16 )).days" +
-</code> +
- +
-And for displaying lines to get cut instead of wrapped: +
- +
-<code bash> +
-cat_one_line_per_row() { +
-  cat "$@" expand | cut -b1-$COLUMNS +
-} +
-</code> +
- +
-ctags's man page says that one of its bugs is that it has too many options.  Ain't that the truth.  Make note of the obscure flag here, ''--c++-kinds=+p'', that tells ctags to process prototypes and method declarations. +
- +
-<code bash> +
-ctags -n --if0=yes --c++-kinds=+p --langmap=c++:+.inl.lst \ +
-    --langmap=asm:+.inc --file-tags=yes -R --extra=fq \ +
-    --exclude=unwanted_file.lst \ +
-    --exclude='*unwanted-directory*/*' \ +
-    --regex-C++='/^.*CINIT.(.+),.*,.*,.*/CURLOPT_\1/' +
-</code> +
- +
-===== For / Else (Nobreak) ===== +
- +
-Python has a [[http://nedbatchelder.com/blog/201110/forelse.html|For/Else keyword]] that should have been called, "nobreak." +
- +
-===== Sorting ===== +
- +
-From an old [[http://dblume.livejournal.com/28319.html|note-to-self]]... +
-<code python> +
-import operator +
- +
-rows.sort(key=operator.itemgetter(4)) +
-# or +
-rows.sort(lambda x, y : x[4] == y[4] and cmp(x[2],y[2]) or cmp(x[4], y[4])) +
-</code> +
- +
-...not like I could just find the same info at the [[http://wiki.python.org/moin/HowTo/Sorting|Python wiki]] or anything. :-P +
- +
-===== Prepopulating lists with objects ===== +
- +
-Remember when you lost a couple of hours thinking that the following line created a list of objects. +
- +
-<code python> +
-    l = [Obj()] * n +
-</code> +
- +
-It doesn't. It creates a list of references to one object. +
- +
-What you meant to write was this: +
- +
-<code python> +
-    l = [Obj() for _ in range(n)] +
-</code> +
- +
-===== Linux script that takes either stdin or files ===== +
- +
-<code python> +
-if __name__=='__main__': +
-    if len(sys.argv) < 2: +
-        # Process lines coming from stdin. +
-        while 1: +
-            line = sys.stdin.readline() +
-            if not line: +
-                break +
-            my_process_line( line.rstrip() ) +
-    else: +
-        # Process lines of the files specified. +
-        for fname in sys.argv[1:]: +
-            if not os.path.exists( fname ): +
-                treat_argument_as_literal( fname ) +
-                continue +
-            with open( fname, 'r' ) as f: +
-                while 1: +
-                    line = f.readline() +
-                    if not line: +
-                        break +
-                    my_process_line( line.rstrip() ) +
-</code> +
- +
-===== The With statement ===== +
- +
-[[http://amix.dk/blog/post/19663#Making-ugly-code-more-beautiful-using-Pythons-with-statement|Making code more beautiful with "with"]].  (Also mentions yield.) +
- +
-===== timeit ===== +
- +
-<code python> +
-import timeit +
- +
-def Use_a(): +
-    pass +
- +
-def Use_b(): +
-    pass +
- +
-def Run_all_tests(): +
-    my_setup() +
-    Use_a() +
-    Use_b() +
- +
-if __name__ == '__main__': +
- +
-#    t = timeit.timeit( 'Run_all_tests()', 'from __main__ import Run_all_tests', number=1 ) +
-#    print dir( t ) +
-#    print t +
- +
-    t = timeit.Timer( 'Run_all_tests()', 'from __main__ import Run_all_tests' ) +
-    print t.timeit() +
-</code> +
- +
-When diving in, cProfile may come in handy. +
- +
-<code python> +
-import cProfile +
- +
-def my_function(): +
-    # Complicated stuff +
-    pass +
-     +
-if __name__ == '__main__': +
-    cProfile.run( "my_function()" ) +
-</code> +
- +
-===== Dynamically Calculating Column Size ====== +
- +
-[[http://stackoverflow.com/questions/3685195/line-up-columns-of-numbers-print-output-in-table-format|Line up columns]] +
- +
-<code python> +
-data = '''\ +
-234 127 34 23 45567 +
-23 12 4 4 45 +
-23456 2 1 444 567''' +
- +
-# Split input data by row and then on spaces +
-rows = [ line.strip().split(' ') for line in data.split('\n') ] +
- +
-# Reorganize data by columns +
-cols = zip(*rows) +
- +
-# Compute column widths by taking maximum length of values per column +
-col_widths = [ max(len(value) for value in col) for col in cols ] +
- +
-# Create a suitable format string +
-format = ' '.join(['%%%ds' % width for width in col_widths ]) +
- +
-# Print each row using the computed format +
-for row in rows: +
-  print format % tuple(row) +
-</code> +
- +
-Which outputs: +
-<code> +
-  234 127 34  23 45567 +
-   23  12  4   4    45 +
-23456   2  1 444   567 +
-</code> +
- +
-Also, here's a [[http://knowledgestockpile.blogspot.com/2011/01/string-formatting-in-python_09.html|nice summary of string formatting in Python]]. +
- +
-===== Different Types of Objects ===== +
- +
-<code python> +
-class A: +
-    """ Old, obsolete. """ +
-    def __init__(self): +
-        self.__m_x = 0 +
- +
-    def getx(self): +
-        return self.__m_x +
- +
-    def setx(self, x): +
-        if x < 0: x = 0 +
-        self.__m_x = x +
- +
-    x = property( getx, setx ) +
- +
-class B: +
-    """ Old; very small, was for for multitudes of objects. """ +
-    __slots__ = [ "__m_x" ] +
-    def __init__(self): +
-        self.__m_x = 0 +
- +
-    def getx(self): +
-        return self.__m_x +
- +
-    def setx(self, x): +
-        if x < 0: x = 0 +
-        self.__m_x = x +
- +
-    x = property( getx, setx )         +
- +
-class C(object): +
-    """ New, reccommended. """ +
-    def __init__(self): +
-        self.__x = 0 +
- +
-    def getx(self): +
-        return self.__x +
- +
-    def setx(self, x): +
-        if x < 0: x = 0 +
-        self.__x = x +
- +
-    x = property( getx, setx ) +
-</code> +
- +
-====== TODO ====== +
- +
-TODO Link to my tips from LiveJournal and GMail, and why I chose which timing modules.+
python.1356552933.txt.gz · Last modified: 2012/12/26 12:15 by dblume
 
Recent changes RSS feed Driven by DokuWiki