Programming in Python Part #1
description
Transcript of Programming in Python Part #1
![Page 1: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/1.jpg)
1
Programming in Python
Part #1
![Page 2: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/2.jpg)
2
Who is using it?
• Google (various projects)
• NASA (several projects)
• NYSE (one of only three languages "on the floor")
• Industrial Light & Magic (everything)
• Yahoo! (Yahoo mail & groups)
• RealNetworks (function and load testing)
• RedHat (Linux installation tools)
• LLNL, Fermilab (steering scientific applications)
• Zope Corporation (content management)
• ObjectDomain (embedded Jython in UML tool)
• Alice project at CMU (accessible 3D graphics)
• More success stories at www.pythonology.com
![Page 3: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/3.jpg)
3
Language properties
• Everything is an object
• Packages, modules, classes, functions
• Exception handling
• Dynamic typing, polymorphism
• Static scoping
• Operator overloading
• Indentation for block structure– Otherwise conventional syntax
![Page 4: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/4.jpg)
4
High-level data types
• Numbers: int, long, float, complex
• Strings
• Lists and dictionaries: containers
• Other types for e.g. binary data, regular expressions
• Extension modules can define new“built-in” data types
![Page 5: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/5.jpg)
5
Interfaces to...
• XML– DOM, expat
– XMLRPC, SOAP, Web Services
• Relational databases– MySQL, PostgreSQL, Oracle , ODBC, Sybase, Informix
• Java (via Jython)
• Objective C
• COM, DCOM (.NET too)
• Many GUI libraries– cross-platform
• Tk, wxWindows, GTK, Qt
– platform-specific• MFC, Mac (classic, Cocoa), X11
![Page 6: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/6.jpg)
6
Compared to Perl
• Easier to learn– very important for infrequent users
• More readable code
• More maintainable code
• Fewer “magical” side effects
• More “safety” guarantees
• Better Java integration
![Page 7: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/7.jpg)
7
Compared to Java
• Code up to 5 times shorter
– and more readable
• Dynamic typing
• Multiple inheritance, operator overloading
• Quicker development
– no compilation phase
– less typing
• Yes, it may run a bit slower
– but development is much faster
– and Python uses less memory (studies show)
Similar (but more so) for C/C++
![Page 8: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/8.jpg)
8
Jython
• Seamless integration with Java
• Separate implementation
• Implements the same language
• Different set of standard modules
• differences in “gray areas”– e.g. some different calls
– different command line options, etc.
![Page 9: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/9.jpg)
9
Jython's Java integration
• Interactive
• Compiles directly to Java bytecode
• Import Java classes directly
• Subclass Java classes– pass instances back to Java
• Java beans integration
• Can compile into Java class files
![Page 10: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/10.jpg)
10
Basic Python Tutorial
• shell (introduces numbers, strings, variables)
• lists (arrays), dictionaries (hashes), tuples
• variable semantics
• control structures, functions
• classes & methods
• standard library:
– files: open(), readline(), read(), readlines(), write(), close(), flush(), seek(), tell(), open() again
– os, os.path, sys, string, UserDict, StringIO, getopt
![Page 11: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/11.jpg)
11
Interactive “Shell”
• Great for learning the language
• Great for experimenting with the library
• Great for testing your own modules
• Type statements or expressions at prompt:>>> print "Hello, world"
Hello, world
>>> x = 12**2
>>> x/2
72
>>> # this is a comment
![Page 12: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/12.jpg)
12
Python is Interactive
>>> 2**16
65536
>>> 2**20
1048576
>>>import string
>>> string.find("abc", "c")
2
![Page 13: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/13.jpg)
13
Python cares about indentation
>>> if isAlpha("a"):
... print "a character!"
... else:
... print "not a character!"
...
a character!
>>>
![Page 14: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/14.jpg)
14
Python is case-sensitive, dynamically typed…
>>> len("test")
4
>>> LEN("test")
NameError: name 'LEN' is not defined
>>> len("test")>1000
0
>>> len("test")<1000
1
>>> len
<built-in function len>
![Page 15: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/15.jpg)
15
Define functions with def
def isAlpha(ch):
return (len(ch)==1) and \
(string.find(string.letters,ch)>=0)
def dumpWords(self):
"""
dumps words and word frequencies
"""
for word in self.wordList:
print word,\
self.dictionary[word]
![Page 16: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/16.jpg)
16
In Python “everything is an object”
• As we saw, including functions
Type(1) -> <type int>
Dir(1) -> … list of functions on ints
![Page 17: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/17.jpg)
17
Python has good data type support for …
• None -- the ‘null’ value
• Ints
• Float
• Strings (import string)
• Lists (AI likes lists…)
• Tuples (non-mutable lists)
• Functions
• Dictionaries (hash tables, AI likes these)
![Page 18: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/18.jpg)
18
Numbers
• The usual notations and operators• 12, 3.14, 0xFF, 0377, (-1+2)*3/4**5, abs(x), 0<x<=5
• C-style shifting & masking• 1<<16, x&0xff, x|1, ~x, x^y
• Integer division truncates• 1/2 -> 0 # float(1)/2 -> 0.5
• Long (arbitrary precision), complex• 2L**100 -> 1267650600228229401496703205376L
• 1j**2 -> (-1+0j)
![Page 19: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/19.jpg)
19
Strings
• "hello"+"world" "helloworld" # concatenation
• "hello"*3 "hellohellohello" # repetition
• "hello"[0] "h" # indexing
• "hello"[-1] "o" # (from end)
• "hello"[1:4] "ell" # slicing
• len("hello") 5 # size
• "hello" < "jello" 1 # comparison
• "e" in "hello" 1 # search
• "escapes: \n etc, \033 etc, \xff etc"
• 'single quotes' '''triple quotes''' r"raw strings"
![Page 20: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/20.jpg)
20
Python lists
>>> a=[1,2,3]
>>> b=[a,a,a]
>>> a
[1, 2, 3]
>>> b
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
>>> a.append(4)
>>> a
[1, 2, 3, 4]
![Page 21: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/21.jpg)
21
Python lists
a = [99, "bottles of beer", ["on", "the", "wall"]]
• Flexible arrays, not Lisp-like linked lists
• Same operators as for stringsa+b, a*3, a[0], a[-1], a[1:], len(a)
• Item and slice assignmenta[0] = 98
a[1:2] = ["bottles", "of", "beer"]
-> [98, "bottles", "of", "beer", ["on", "the", "wall"]]
del a[-1] # -> [98, "bottles", "of", "beer"]
![Page 22: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/22.jpg)
22
More list operations
>>> a = range(5) # [0,1,2,3,4]
>>> a.append(5) # [0,1,2,3,4,5]
>>> a.pop() # [0,1,2,3,4]
5
>>> a.insert(0, 5.5) # [5.5,0,1,2,3,4]
>>> a.pop(0) # [0,1,2,3,4]
5.5
>>> a.reverse() # [4,3,2,1,0]
>>> a.sort() # [0,1,2,3,4]
![Page 23: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/23.jpg)
23
Python dictionaries
>>> d={}
>>> d['test'] = 1
>>> d['test']
1
>>> d[3]=100
>>> d[4]
KeyError: 4
>>> d.get(4,0)
0
![Page 24: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/24.jpg)
24
Dictionaries – Hash Tables
• Hash tables, "associative arrays"d = {"duck": "eend", "water": "water"}
• Lookup:d["duck"] -> "eend"
d["back"] # raises KeyError exception
• Delete, overwrite :del d["water"] # {"duck": "eend", "back": "rug"}
d["duck"] = "duik" # {"duck": "duik", "back": "rug"}
![Page 25: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/25.jpg)
25
More dictionary operations
• Keys, values, items:d.keys() -> ["duck", "back"]
d.values() -> ["duik", "rug"]
d.items() -> [("duck","duik"), ("back","rug")]
• Presence check:d.has_key("duck") -> 1; d.has_key("spam") -> 0
• Values of any type; keys almost any{"name":"Guido", "age":43, ("hello","world"):1,
42:"yes", "flag": ["red","white","blue"]}
![Page 26: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/26.jpg)
26
Dictionary details
• Keys must be immutable:– numbers and strings of immutables
• these cannot be changed after creation
– reason is hashing (fast lookup technique)
– not lists or other dictionaries
• these types of objects can be changed "in place"
– no restrictions on values
• Keys will be listed in arbitrary order– again, because of hashing
![Page 27: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/27.jpg)
27
Python Tuples
• Look (sorta) like Scheme/Lisp lists for syntax
• But can’t be changed
>>> a=(1,2,3)
>>> a.append(4)
AttributeError: 'tuple' object has no attribute 'append’
![Page 28: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/28.jpg)
28
Python Tuples
• key = (lastname, firstname)
• point = x, y, z # parent's optional
• x, y, z = point
• lastname = key[0]
• singleton = (1,) # trailing comma!
• empty = () # parentheses!
• tuples vs. lists; tuples immutable
![Page 29: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/29.jpg)
29
Variables
• No need to declare
• Need to assign (initialize)• use of un-initialized variable raises exception
• Not typedif friendly: greeting = "hello world"
else: greeting = 12**2
print greeting
• Everything is a variable:• functions, modules, classes
![Page 30: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/30.jpg)
30
Reference semantics
• Assignment manipulates referencesx = y does not make a copy of y
x = y makes x reference the object y references
• Very useful; but beware!
• Example:>>> a = [1, 2, 3]; b = a
>>> a.append(4); print b
[1, 2, 3, 4]
![Page 31: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/31.jpg)
31
a
1 2 3
b
a
1 2 3
b
4
a = [1, 2, 3]
a.append(4)
b = a
a 1 2 3
Changing a shared list
![Page 32: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/32.jpg)
32
a
1
b
a
1b
a = 1
a = a+1
b = a
a 1
2
Changing an integer
old reference deletedby assignment (a=...)
new int object createdby add operator (1+1)
![Page 33: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/33.jpg)
33
Control structures
if condition:
statements
[elif condition:
statements] ...
[else:
statements]
while condition:
statements
for var in sequence:
statements
break
continue
![Page 34: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/34.jpg)
34
Grouping indentation
• Python:
for i in range(20):
if i%3 == 0:
print i
if i%5 == 0:
print "Bingo!"
print "---"
• C:
for (i = 0; i < 20; i++)
{
if (i%3 == 0) {
printf("%d\n", i);
if (i%5 == 0) {
printf("Bingo!\n"); }
}
printf("---\n");
}
0Bingo!---------3---------6---------9---------12---------15Bingo!---------18------
![Page 35: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/35.jpg)
35
Functions, procedures
def name(arg1, arg2, ...):
"documentation" # optional
statements
return # from procedure
return expression # from function
![Page 36: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/36.jpg)
36
Example function
def gcd(a, b):
"greatest common divisor"
while a != 0:
a, b = b%a, a # parallel assignment
return b
>>> gcd.__doc__
'greatest common divisor'
>>> gcd(12, 20)
4
![Page 37: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/37.jpg)
37
Classes
class name:
"documentation"
statements
-or-
class name(baseclass1, baseclass2, ...):
...
Typically, statements contains method definitions:
def name(self, arg1, arg2, ...):
...
May also contain class variable assignments
![Page 38: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/38.jpg)
38
You can define classes with class
• The class system changed in Python 2.2, be sure to use the “new style classes,” which inherit from object
>>> class foo(object):
... pass
>>> a = foo()
>>> type(a)
<class '__main__.foo'>
![Page 39: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/39.jpg)
39
Creating classes - walk thru
class Integer(object):
""" example class """ # doc string
# note use of self variable:
def __init__(self,ivalue): # special name
self.__ivalue=ivalue # field names
def getIntValue(self): # read accessor
return self.__ivalue
def setIntValue(self,ivalue): #write accessor
self.__ivalue=ivalue
# set up attribute
intValue=property(getIntValue,setIntValue)
![Page 40: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/40.jpg)
40
Example class
class Stack:
"A well-known data structure…"
def __init__(self): # constructor
self.items = []
def push(self, x):
self.items.append(x) # the sky is the limit
def pop(self):
x = self.items[-1] # what happens if it’s empty?
del self.items[-1]
return x
def empty(self):
return len(self.items) == 0 # Boolean result
![Page 41: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/41.jpg)
41
Using classes
>>> x=Integer(1000)
>>> x.getIntValue()
1000
>>> x.setIntValue(10)
>>> x.intValue
10
>>> x.intValue=500
>>> x.intValue
500
![Page 42: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/42.jpg)
42
Using classes
• To create an instance, simply call the class object:x = Stack()
• To use methods of the instance, call using dot notation:x.empty() # -> 1
x.push(1) # [1]
x.empty() # -> 0
x.push("hello") # [1, "hello"]
x.pop() # -> "hello" # [1]
• To inspect instance variables, use dot notation:x.items # -> [1]
![Page 43: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/43.jpg)
43
Subclassing
class FancyStack(Stack):
"stack with added ability to inspect inferior stack items"
def peek(self, n):
"peek(0) returns top; peek(-1) returns item below that; etc."
size = len(self.items)
assert 0 <= n < size # test precondition
return self.items[size-1-n]
![Page 44: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/44.jpg)
44
Subclassing
class LimitedStack(FancyStack):
"fancy stack with limit on stack size"
def __init__(self, limit):
self.limit = limit
FancyStack.__init__(self) # base class constructor
def push(self, x):
assert len(self.items) < self.limit
FancyStack.push(self, x) # "super" method call
![Page 45: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/45.jpg)
45
Class & instance variables
class Connection:
verbose = 0 # class variable
def __init__(self, host):
self.host = host # instance variable
def debug(self, v):
self.verbose = v # make instance variable!
def connect(self):
if self.verbose: # class or instance variable?
print "connecting to", self.host
![Page 46: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/46.jpg)
46
Modules
• Collection of stuff in foo.py file– functions, classes, variables
• Importing modules:– import string; print string.join(L)
– from string import join; print join(L)
• Rename after import:– import string; s = string; del string
![Page 47: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/47.jpg)
47
Packages
• Collection of modules in directory
• Must have __init__.py file
• May contain subpackages
• Import syntax:– from P.Q.M import foo; print foo()
– from P.Q import M; print M.foo()
– import P.Q.M; print P.Q.M.foo()
![Page 48: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/48.jpg)
48
Catching Exceptions
try:
print 1/x
except ZeroDivisionError, message:
print "Can’t divide by zero:"
print message
![Page 49: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/49.jpg)
49
Try-Finally: Cleanup
f = open(file)
try:
process_file(f)
finally:
f.close() # always executed
print "OK" # executed on success only
![Page 50: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/50.jpg)
50
Raising Exceptions
• raise IndexError
• raise IndexError("k out of range")
• raise IndexError, "k out of range”
• try: somethingexcept: # catch everything print "Oops" raise # reraise
![Page 51: Programming in Python Part #1](https://reader036.fdocuments.in/reader036/viewer/2022081508/56813b47550346895da42c34/html5/thumbnails/51.jpg)
51
End of Lecture