!!!Python
-----------------------
(P2) indicates Python 2 \\
(P3) indicates Python 3
!Running
Create a file named "file1.py"
{{{python3 file1.py}}}
!Data Types - all are objects
| NoneType | None (like null or nil)
| bool | False / True (also acts like 0 / 1)
| int | unlimited size (P3), 23 (0x22 hex, 0o34 octal, 0b010 binary)
| long | P2 only, 48L
| float | 3.141
| str | “string” or ‘string’ - immutable
| | characters are just strings of length 1
| [[a,b] | list - mutable
| (a,b) | tuple - immutable
!Data Conversion
| int(x) | convert to int
| long(x) | P2 only
| str(x) | convert to str
!Misc
Comments start with #
All variables are object references (boxed)
Identifiers start with a letter or underscore - case sensitive
All variables are dynamically typed
{{type(x)}} returns the class of {{x}}
Zero based indexing using [[]. Also allows negative indexing from the back (-1 = last character)
!Logical operations
In conditionals, the following are all false:
| False
| None
| 0
| “”
All else is true.
| x is y | do x and y refer to the same object
| x is not y |
| == | compares values, works on strings
| 1 < x > 10 | range check
| 2 in [[1, 2, 3, 4] |
| ‘el’ in ‘hello there’ |
Logical operators (works like lisp!)
|and
|or
|not
!Function Definition
{{{def fun():
line 1
line 2}}}
Can use {{{return x}}} (without {{{return}}}, returns None)
Function names that begin with underscore are private (by convention - not enforced)
Statement grouping is indicated by space characters at the beginning of each line rather than braces, {{{begin}}} / {{{end}}} statements, etc.
All variables are local unless declared with {{global}}
!Statements
{{{if cond1:
stmt 1
elif cond2:
stmt 2
else:
stmt 3}}}
{{{while cond:
stmts}}}
{{{for var in lst:
stmt using var}}}
{{{try:
stmts
except type as var:
stmts}}}
!Operators
|{{{+=}}} | works on all data types
|{{{"""string"""}}} | to embed newlines in string
| {{{pass}}} | is statement that does nothing (used where statements are required)
!Modules & Packages
(Application) Module X = X.py file
Also system modules like: sys os etc.
{{{import file1 # imports file "file1.py"
import file1, file2, file3
import file1 as mymodule}}}
or
{{{from file1 import * # imports into the current package
from file1 import (obj1, obj2, …)}}}
Accessing objects imported via the lines starting with “import” is done:
{{{file1.obj1}}}
Accessing objects imported via the lines starting with “from” is done:
{{{obj1}}}
Python searches for modules as follows:
# same directory as file with the import statement
# PYTHONPAH environment variable
# sys.path
import only loads it the first time but will not re-load a changed file
Reloading a changed file can be done with {{{reload(file1)}}}
!Input / Output
| print(x) | prints x and newline (P3)
| x = input(“prompt”) | input string with prompt (P3)
| x = raw_input(“prompt”) | input string with prompt (P2)
| x = input() | input string without prompt (throws EOFError exception)
!Classes
Top of hierarchy is “object”
Supports multiple-inheritance & metaclasses
{{{class MyClass:
...}}}
{{{class MyClass (SuperClass1, SuperClass2, …):
...}}}
{{{class MyClass:
cv1 = None
def __init__(self):
self.iv1 = None
self.iv2 = None
def getiv1(self):
return self.iv1
def setiv1(self, val):
self.iv1 = val
@classmethod
def getcv1(cls):
return MyClass.cv1
@classmethod
def setcv1(cls, val):
MyClass.cv1 = val
def __repr__(self): # printed representation (also str() if no
return "aabb" # __str__
def __str__(self): # str() representation
return "xxxxyyyy"
x = MyClass()
MyClass.setcv1(55)
x.setiv1(33)
MyClass.cv1 = 77
x.iv1 = 32
class MyClass2(MyClass):
def __init__(self):
super().__init__()}}}
!Dictionary
{{{dict = {}
dict[‘key’] = value
value = dict['key']
dict.clear()
len(dict)
dict.get(‘key’)
dict.has_key(‘key’)
dict.keys()
key in dict}}}
!Virtual environments
{{{mkdir myProject create virtual environment
cd myProject
virtualenv venv
source venv/bin/activate enter virtual environment
deactivate exit virtual environment}}}
!ODBC
{{{import pyodbc
conn = pyodbc.connect('DSN=XXX;UID=YYY;PWD=ZZZ;DATABASE=MyDatabase')
cursor = conn.cursor()
cursor.execute("SELECT * from my_table")
while 1:
row = cursor.fetchone()
if not row:
break
print row.name}}}
[https://code.google.com/p/pyodbc/wiki/GettingStarted]