Python
is dynamically typed (like VBScript) and strongly typed like C++, Java
(because once a variable is declared, its datatype matters)
This basic introduction contains the following:
-
Dictionary
>>> mydict={"foo":"bar",1:"One","sigma":20.21}
>>> mydict
{1: 'One', 'foo': 'bar', 'sigma': 20.210000000000001}
The entry before the ":" is the key, the entry after the ":" value. Keys can be string, integers etc and so can values. NOTE: Keys are case sensitive!
To replace the value associated with a key
>>> mydict["sigma"]=21.0
>>> mydict
{1: 'One', 'foo': 'bar', 'sigma': 21.0}
To remove a key
>>> del mydict[1]
>>> mydict
{'rate': 0.050000000000000003, 'foo': 'bar', 'sigma': 20.210000000000001}
To clear a dictionary
>>> mydict.clear()
>>> mydict
{}
-
Lists
Lists are ordered. List can include a mix of ,ultiple data types
>>> li=["a",1,2,"foo",4.5]
>>> li
['a', 1, 2, 'foo', 4.5]
List
elements start at index 0. A negative index of -1 returns the last
items of the list. A range can be as li[m:n] where the elments starts
at m upto but not including element n. li[:n] would start at the zeroth
element. li[m:] would go from m to the last element. li[:] would
display the entire list
>>> li[0]
'a'
>>> li[3]
'foo'
>>> li[-1]
4.5
>>> li[1:3]
[1, 2]
To extend a list
>>> li.extend(["bar", 12.1])
>>> li
['a', 1, 2, 'foo', 4.5, 'bar', 12.1]
To append to a list
>>> li.append(["foobar", 100])
>>> li
['a', 1, 2, 'foo', 4.5, 'bar', 12.1, ['foobar', 100]]
The difference between "append" and "extend"
is that extend inserts every element from the source list as an element
into the destination list, whilst append simply inserts the list object
itself
Insert behaves just like append, just that insert requries to know the index at which the insertion occurs
>>> li.insert(2,["insertedelement", 10000.22])
>>> li
['a', 1, ['insertedelement', 10000.219999999999], 2, 'foo', 4.5, 'bar', 12.1, ['foobar', 100]]
Finally, list operators such as "+", "+=" and "*" do the following
>>> li=["a",1]
>>> li
['a', 1]
>>> li = li + ["b", 3]
>>> li
['a', 1, 'b', 3]
>>> li += [4, 5]
>>> li
['a', 1, 'b', 3, 4, 5]
>>> li = [1,2]*3
>>> li
[1, 2, 1, 2, 1, 2]
"+", "+=" are slower than extend because the construct new lists, extend operates on the existing list
-
Tuples
Tuples
like lists are ordered. Tuples are declared using the round bracket
rather than the square ones. Tuples are IMMUTABLE!. Tuples are faster
than lists (if the list was meant for read only use only).
>>> t=("a",1,2,"foo",4.5)
>>> t
(a', 1, 2, 'foo', 4.5)
-
Variables
Single and multiple variable (range) declaration
>>> h
Traceback (most recent call last):
File "", line 1, in
NameError: name 'h' is not defined
>>> h=1
>>> h
1
>>> v = ('a', 'b', 'e')
>>> (x, y, z) = v
>>> x
'a'
>>> y
'b'
>>> z
'e'
>>> range(7)
[0, 1, 2, 3, 4, 5, 6]
>>> (MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY) = range(7)
>>> MONDAY
0
>>> SATURDAY
5
Range can take a start parameter and step size too, type range.__doc__ for mode details
-
Formatting
>>> uid = "sa"
>>> pwd = "secret"
>>> print pwd + " is not a good password for " + uid
secret is not a good password for sa
>>> print "%s is not a good password for %s" % (pwd, uid)
The first method is only useful if all the variables are string. For mixed datatypes only the second method will succeed
>>> print "Today's stock price: %f" % 50.4625
50.462500
>>> print "Today's stock price: %.2f" % 50.4625
50.46
>>> print "Change since yesterday: %+.2f" % 1.5
+1.50
-
Mapping Lists
One
of the most powerful features of Python is the list comprehension,
which provides a compact way of mapping a list into another list by
applying a function to each of the elements of the list
>>> li = [1, 9, 8, 4]
>>> [elem*2 for elem in li]
[2, 18, 16, 8]
>>> li
[1, 9, 8, 4]
>>> li = [elem*2 for elem in li]
>>> li
[2, 18, 16, 8]
The keys, values, and items Functions
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
>>> params.keys()
['pwd', 'database', 'uid', 'server']
>>> params.values()
['secret', 'master', 'sa', 'mpilgrim']
>>> params.items()
[('pwd', 'secret'), ('database', 'master'), ('uid', 'sa'), ('server', 'mpilgrim')]
List comprehension, step-by-step
>>> params.items()
[('pwd', 'secret'), ('database', 'master'), ('uid', 'sa'), ('server', 'mpilgrim')]
>>> [k for k, v in params.items()]
['pwd', 'database', 'uid', 'server']
>>> [v for k, v in params.items()]
['secret', 'master', 'sa', 'mpilgrim']
>>> ["%s=%s" % (k, v) for k, v in params.items()]
['pwd=secret', 'database=master', 'uid=sa', 'server=mpilgrim']
-
Functions
Create a file called odbchelper.py (using ActivePython IDE, maybe).
def buildConnectionString(params):
"""Build a connection string from a dictionary of parameters.
Returns string."""
return ";".join(["%s=%s" % (k, v) for k, v in params.items()])
if __name__ == "__main__":
myParams = {"server":"mpilgrim", \
"database":"master", \
"uid":"sa", \
"pwd":"secret" \
}
print buildConnectionString(myParams)
The output of odbchelper.py will look like this:
server=mpilgrim;uid=sa;database=master;pwd=secret
Python
functions do not specify the datatype of their return value; they don't
even specify whether or not they return a value. In fact, every Python
function returns a value; if the function ever executes a return
statement, it will return that value, otherwise it will return None,
the Python null value.
Triple quotes signify a multi-line string. Everything
between the start and end quotes is part of a single string, Triple
quotes signify a multi-line string. Everything between the start and
end quotes is part of a single string, including carriage returns and
other quote characters. You can use them anywhere, but you'll see them
most often used when defining a doc string including carriage returns
and other quote characters. You can use them anywhere, but you'll see
them most often used when defining a doc string.
-
Indenting Code
Python functions have no explicit begin or end, and no curly braces to
mark where the function code starts and stops. The only delimiter is a
colon (:) and the indentation of the code itself.
Code blocks are defined by their indentation. By "code
block", I mean functions, if statements, for loops, while loops, and so
forth. Indenting starts a block and unindenting ends it. There are no
explicit braces, brackets, or keywords. This means that whitespace is
significant, and must be consistent. In this example, the function code
(including the doc string) is indented four spaces. It doesn't need to
be four spaces, it just needs to be consistent. The first line that is
not indented is outside the function.
- The Main Program
Unlike C, C++, Java and the likes, Python uses a trick to run test a module, the if __name__ trick.
A module's __name__ depends on how you're using the module. If you import the module, then __name__ is the module's filename, without a directory path or file extension. But you can also run the module directly as a standalone program, in which case __name__ will be a special default value, __main__ .
-
The Import Search Path
>>> import sys
>>> sys.path
['', 'C:\\WINDOWS\\system32\\python26.zip', 'C:\\Python26\\DLLs',
'C:\\Python26\\lib', 'C:\\Python26\\lib\\plat-win',
'C:\\Python26\\lib\\lib-tk',
'C:\\Python26\\Lib\\site-packages\\pythonwin', 'C:\\Python26',
'C:\\Python26\\lib\\site-packages',
'C:\\Python26\\lib\\site-packages\\win32',
'C:\\Python26\\lib\\site-packages\\win32\\lib', 'W:\\python\\tutorial']
>>> sys.path.append('C:\\temp')
>>> sys.path
['', 'C:\\WINDOWS\\system32\\python26.zip', 'C:\\Python26\\DLLs',
'C:\\Python26\\lib', 'C:\\Python26\\lib\\plat-win',
'C:\\Python26\\lib\\lib-tk',
'C:\\Python26\\Lib\\site-packages\\pythonwin', 'C:\\Python26',
'C:\\Python26\\lib\\site-packages',
'C:\\Python26\\lib\\site-packages\\win32',
'C:\\Python26\\lib\\site-packages\\win32\\lib', 'W:\\python\\tutorial',
'C:\\temp']
Make sure you have the directory where you saved odbchelper.py in the path. Now execute the following
>>> import odbchelper
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
>>> print odbchelper.buildConnectionString(params)
server=mpilgrim;uid=sa;database=master;pwd=secret
>>> print odbchelper.buildConnectionString.__doc__
Build a connection string from a dictionary
Returns string.
-
Joining And Splitting Strings
>>> dict={"foo":"bar","one":1,"pswd":"secret","uid":"sa"}
>>>dict
>>> s=";".join(dict)
>>> s
'pswd;foo;uid;one'
>>> s1=";".join("%s=%s" % (k,v) for k, v in dict.items())
>>> s1
'pswd=secret;foo=bar;uid=sa;one=1'
In
the first case, just the keys of the dictionary are joined. Using
comprehension, we can get a list of name value pairs in a ";" separated
list
Splitting a String reverses the above join
>>> s.split(";")
['pswd', 'foo', 'uid', 'one']
>>> s1.split(";")
['pswd=secret', 'foo=bar', 'uid=sa', 'one=1']
However, note that the list is made up of String elements only
|