Python: Difference between revisions
Jump to navigation
Jump to search
(→Traps) |
(→Tips) |
||
Line 39: | Line 39: | ||
More available at http://docs.python.org/2/library/internet.html (see ''BaseHTTPServer'' and ''CGIHTTPServer''). |
More available at http://docs.python.org/2/library/internet.html (see ''BaseHTTPServer'' and ''CGIHTTPServer''). |
||
=== Detect interactive mode === |
|||
References: [http://stackoverflow.com/questions/2356399/tell-if-python-is-in-interactive-mode], [http://stackoverflow.com/questions/1212779/detecting-when-a-python-script-is-being-run-interactively-in-ipython] |
|||
{| class=wikitable |
|||
|- |
|||
!Started with!!First method!!Second method!!Third method |
|||
|- |
|||
| |
|||
|<source lang=python> |
|||
import __main__ as main |
|||
print hasattr(main, '__file__') |
|||
</source> |
|||
|<source lang=python> |
|||
def in_ipython(): |
|||
try: |
|||
__IPYTHON__ |
|||
except NameError: |
|||
return False |
|||
else: |
|||
return True |
|||
</source> |
|||
|<source lang=python> |
|||
import sys |
|||
if hasattr(sys, 'ps1'): |
|||
print "Running interactively." |
|||
else: |
|||
print "Not running interactively..." |
|||
if sys.flags.interactive: |
|||
print "... but I'm in interactive postmortem mode." |
|||
</source> |
|||
|- |
|||
|<code>python mymod.py</code> |
|||
|True||-||- |
|||
|- |
|||
|<code>python</code> then <code>import mymod</code> |
|||
||-||-||True |
|||
|- |
|||
|<code>ipython mymod.py</code> |
|||
||True||True||- |
|||
|- |
|||
|<code>ipython -i mymod.py</code> |
|||
||True||True||- |
|||
|- |
|||
|<code>ipython</code> then <code>run mymod.py</code> |
|||
||True||True||- |
|||
|- |
|||
|<code>ipython</code> then <code>run -i mymod.py</code> |
|||
||True||True||- |
|||
|- |
|||
|<code>ipython</code> then <code>import mymod</code> |
|||
||-||True||- |
|||
|- |
|||
|<code>ipython -i</code> then <code>import mymod</code> |
|||
||-||True||- |
|||
|} |
|||
== Traps == |
== Traps == |
Revision as of 13:08, 8 April 2014
Links
- Nice example of generating / testing regex in Python (with nice / small test framework) [1]
Shell
Use iPy (ipython) to get an interactive shell with auto-completion, instant help...
%magic # Get help on %magic commands (%run,...)
?run # Get help on %run magic
%run script.py # Run given script
%run -i script.py # ... with inspect mode on
%run -i -e script.py # ... ... and ignore sys.exit() call
!cmd # Run shell command 'cmd', for instance ...
!ls # ... List file in current directory
Reference
Basic
for i in range(10):
print i # carriage return
for i in range(10):
print i, # no carriage return
Tips
Simple HTTP Server
It's very easy to setup an ad-hoc HTTP server with Python. Just open a shell in a folder with some contents to share, and type:
python -m SimpleHTTPServer
More available at http://docs.python.org/2/library/internet.html (see BaseHTTPServer and CGIHTTPServer).
Detect interactive mode
Started with | First method | Second method | Third method |
---|---|---|---|
import __main__ as main
print hasattr(main, '__file__')
|
def in_ipython():
try:
__IPYTHON__
except NameError:
return False
else:
return True
|
import sys
if hasattr(sys, 'ps1'):
print "Running interactively."
else:
print "Not running interactively..."
if sys.flags.interactive:
print "... but I'm in interactive postmortem mode."
| |
python mymod.py
|
True | - | - |
python then import mymod
|
- | - | True |
ipython mymod.py
|
True | True | - |
ipython -i mymod.py
|
True | True | - |
ipython then run mymod.py
|
True | True | - |
ipython then run -i mymod.py
|
True | True | - |
ipython then import mymod
|
- | True | - |
ipython -i then import mymod
|
- | True | - |
Traps
Frequent mistakes. Beware the snake can bite you!
- Confuse a method and a property in a test
- SOLUTION: Stick to a convention. Like always define methods like
isxyyz()
orhasabc()
as methods. Note that defining them as property would raise an exception if used as a function, and hence might be safer.
if A.isdummy(): # This will fail isdummy is a property
if A.isdummy: # Always True if isdummy is a method
- Mix
0
withNone
in a sequence - Testing whether an element is defined is more difficult.
a = [0,None,None,None]
bool(a[0]) # --> False
bool(a[1]) # --> False !!! How can we tell them apart?
a[1] == None # --> True This works, but is unusual and likely bad practice
- Mixing property and normal getter
- SOLUTION: prefix all getter method with get, like
getvalue()
b = a.prop # Using a property, OR
b = a.getprop() # Using a getter