Introduction to Python
LinuxWorld - New York City - January 2002
Guido van Rossum
Director of PythonLabs at Zope Corporation
guido@python.org
guido@zope.com
Slide 2 ©2001, 2002 Guido van Rossum
Why Python?
• Have your cake and eat it, too:
Productivity and readable code
• VHLLs will gain on system languages
(John Ousterhout)
• "Life's better without braces"
(Bruce Eckel)
Slide 3 ©2001, 2002 Guido van Rossum
Tutorial Outline
• interactive "shell"
• basic types: numbers, strings
• container types: lists, dictionaries, tuples
• variables
• control structures
• functions & procedures
• classes & instances
• modules & packages
• exceptions
• files & standard library
• what's new in Python 2.0 and beyond
Slide 4 ©2001, 2002 Guido van Rossum
Try It Out!
• If you brought a laptop into the classroom,
feel free to play along
• Download Python from www.python.org
• Any version will do for this class
– By and large they are all mutually compatible
– Recommended version: 2.1.1 or 2.2
– Oldest version still in widespread use: 1.5.2
– Avoid 1.6/1.6.1 if you can
– When using 2.0 or 2.1, upgrade to 2.0.1 / 2.1.1
– 2.1.2 is coming soon!
• Use IDLE if you can
Slide 5 ©2001, 2002 Guido van Rossum
Interactive “Shell”
• Great for learning the language
• Great for experimenting with the library
• Great for testing your own modules
• Two variations: IDLE (GUI),
python (command line)
• Type statements or expressions at prompt:
>>> print "Hello, world"
Hello, world
>>> x = 12**2
>>> x/2
72
>>> # this is a comment
Slide 6 ©2001, 2002 Guido van Rossum
Numbers
• The usual suspects
• 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 # 1./2. -> 0.5, float(1)/2 -> 0.5
• Will be fixed in the future
• Long (arbitrary precision), complex
• 2L**100 -> 1267650600228229401496703205376L
– In Python 2.2 and beyond, 2**100 does the same thing
• 1j**2 -> (-1+0j)
Slide 7 ©2001, 2002 Guido van Rossum
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, if etc"
• 'single quotes' """triple quotes""" r"raw strings"
Slide 8 ©2001, 2002 Guido van Rossum
Lists
• Flexible arrays, not Lisp-like linked lists
• a = [99, "bottles of beer", ["on", "the", "wall"]]
• Same operators as for strings
• a+b, a*3, a[0], a[-1], a[1:], len(a)
• Item and slice assignment
• a[0] = 98
• a[1:2] = ["bottles", "of", "beer"]
-> [98, "bottles", "of", "beer", ["on", "the", "wall"]]
• del a[-1] # -> [98, "bottles", "of", "beer"]
Slide 9 ©2001, 2002 Guido van Rossum
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, 42) # [42,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]
Slide 10 ©2001, 2002 Guido van Rossum
Dictionaries
• Hash tables, "associative arrays"
• d = {"duck": "eend", "water": "water"}
• Lookup:
• d["duck"] -> "eend"
• d["back"] # raises KeyError exception
• Delete, insert, overwrite:
• del d["water"] # {"duck": "eend", "back": "rug"}
• d["back"] = "rug" # {"duck": "eend", "back": "rug"}
• d["duck"] = "duik" # {"duck": "duik", "back": "rug"}
Slide 11 ©2001, 2002 Guido van Rossum
More Dictionary Ops
• 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"]}
Slide 12 ©2001, 2002 Guido van Rossum
Dictionary Details
• Keys must be immutable:
– numbers, strings, tuples 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
Slide 13 ©2001, 2002 Guido van Rossum
Tuples
• key = (lastname, firstname)
• point = x, y, z # parentheses optional
• x, y, z = point # unpack
• lastname = key[0]
• singleton = (1,) # trailing comma!!!
• empty = () # parentheses!
• tuples vs. lists; tuples immutable
Slide 14 ©2001, 2002 Guido van Rossum
Variables
• No need to declare
• Need to assign (initialize)
• use of uninitialized variable raises exception
• Not typed
if friendly: greeting = "hello world"
else: greeting = 12**2
print greeting
• Everything is a "variable":
• Even functions, classes, modules
Slide 15 ©2001, 2002 Guido van Rossum
Reference Semantics
• Assignment manipulates references
• x = 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]
Slide 16 ©2001, 2002 Guido van Rossum
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
Slide 17 ©2001, 2002 Guido van Rossum
a
1
b
a
1
b
a = 1
a = a+1
b = a
a 1
2
Changing an Integer
old reference deleted
by assignment (a=...)
new int object created
by add operator (1+1)
Slide 18 ©2001, 2002 Guido van Rossum
Control Structures
if condition:
statements
[elif condition:
statements] ...
else:
statements
while condition:
statements
for var in sequence:
statements
break
continue
Slide 19 ©2001, 2002 Guido van Rossum
Grouping Indentation
In Python:
for i in range(20):
if i%3 == 0:
print i
if i%5 == 0:
print "Bingo!"
print "---"
In C:
for (i = 0; i < 20; i++)
{
if (i%3 == 0) {
printf("%dn", i);
if (i%5 == 0) {
printf("Bingo!n"); }
}
printf("---n");
}
0
Bingo!
---
---
---
3
---
---
---
6
---
---
---
9
---
---
---
12
---
---
---
15
Bingo!
---
---
---
18
---
---
Slide 20 ©2001, 2002 Guido van Rossum
Functions, Procedures
def name(arg1, arg2, ...):
"""documentation""" # optional doc string
statements
return # from procedure
return expression # from function
Slide 21 ©2001, 2002 Guido van Rossum
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
Slide 22 ©2001, 2002 Guido van Rossum
Classes
class name:
"documentation"
statements
-or-
class name(base1, base2, ...):
...
Most, statements are method definitions:
def name(self, arg1, arg2, ...):
...
May also be class variable assignments
Slide 23 ©2001, 2002 Guido van Rossum
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
Slide 24 ©2001, 2002 Guido van Rossum
Using Classes
• To create an instance, simply call the class object:
x = Stack() # no 'new' operator!
• 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]
Slide 25 ©2001, 2002 Guido van Rossum
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]
Slide 26 ©2001, 2002 Guido van Rossum
Subclassing (2)
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
Slide 27 ©2001, 2002 Guido van Rossum
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
Slide 28 ©2001, 2002 Guido van Rossum
Instance Variable Rules
• On use via instance (self.x), search order:
– (1) instance, (2) class, (3) base classes
– this also works for method lookup
• On assignment via instance (self.x = ...):
– always makes an instance variable
• Class variables "default" for instance
variables
• But...!
– mutable class variable: one copy shared by all
– mutable instance variable: each instance its own
Slide 29 ©2001, 2002 Guido van Rossum
Modules
• Collection of stuff in foo.py file
– functions, classes, variables
• Importing modules:
– import re; print re.match("[a-z]+", s)
– from re import match; print match("[a-z]+", s)
• Import with rename:
– import re as regex
– from re import match as m
– Before Python 2.0:
• import re; regex = re; del re
Slide 30 ©2001, 2002 Guido van Rossum
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()
– import P.Q.M as M; print M.foo() # new
Slide 31 ©2001, 2002 Guido van Rossum
Catching Exceptions
def foo(x):
return 1/x
def bar(x):
try:
print foo(x)
except ZeroDivisionError, message:
print "Can’t divide by zero:", message
bar(0)
Slide 32 ©2001, 2002 Guido van Rossum
Try-finally: Cleanup
f = open(file)
try:
process_file(f)
finally:
f.close() # always executed
print "OK" # executed on success only
Slide 33 ©2001, 2002 Guido van Rossum
Raising Exceptions
• raise IndexError
• raise IndexError("k out of range")
• raise IndexError, "k out of range"
• try:
something
except: # catch everything
print "Oops"
raise # reraise
Slide 34 ©2001, 2002 Guido van Rossum
More on Exceptions
• User-defined exceptions
– subclass Exception or any other standard exception
• Old Python: exceptions can be strings
– WATCH OUT: compared by object identity, not ==
• Last caught exception info:
– sys.exc_info() == (exc_type, exc_value, exc_traceback)
• Last uncaught exception (traceback printed):
– sys.last_type, sys.last_value, sys.last_traceback
• Printing exceptions: traceback module
Slide 35 ©2001, 2002 Guido van Rossum
File Objects
• f = open(filename[, mode[, buffersize])
– mode can be "r", "w", "a" (like C stdio); default "r"
– append "b" for text translation mode
– append "+" for read/write open
– buffersize: 0=unbuffered; 1=line-buffered; buffered
• methods:
– read([nbytes]), readline(), readlines()
– write(string), writelines(list)
– seek(pos[, how]), tell()
– flush(), close()
– fileno()
Slide 36 ©2001, 2002 Guido van Rossum
Standard Library
• Core:
– os, sys, string, getopt, StringIO, struct, pickle,
...
• Regular expressions:
– re module; Perl-5 style patterns and matching
rules
• Internet:
– socket, rfc822, httplib, htmllib, ftplib, smtplib, ...
• Miscellaneous:
– pdb (debugger), profile+pstats
– Tkinter (Tcl/Tk interface), audio, *dbm, ...
Slide 37 ©2001, 2002 Guido van Rossum
Python 2.0: What's New
• Augmented assignment: x += y
• List comprehensions:
[s.strip() for s in f.readlines()]
• Extended print: print >>sys.stderr, "Hello!"
• Extended import: import foo as bar
• Unicode strings: u"u1234"
• New re implementation (faster, Unicode)
• Collection of cyclic garbage
• XML, distutils
Slide 38 ©2001, 2002 Guido van Rossum
Python 2.1: What's New
• From __future__ import nested_scopes
– def make_adder(n):
def adder(x): return x+n
return adder
– add2 = make_adder(2)
– add2(10) == 12
• Rich comparisons
– Overload <, <=, ==, !=, >=, > separately
• Warnings framework
– Prepare for the future
Slide 39 ©2001, 2002 Guido van Rossum
Python 2.2: What's New
• Iterators and Generators
• from __future__ import generators
def inorder(tree):
if tree:
for x in inorder(tree.left): yield x
yield tree.label
for x in inorder(tree.right): yield x
• Type/class unification
– class mydict(dict): …
• Fix division operator so 1/2 == 0.5; 1//2
== 0
– Requires __future__ statement in Python 2.x
– Change will be permanent in Python 3.0
Slide 40 ©2001, 2002 Guido van Rossum
URLs
• http://www.python.org
– official site
• http://starship.python.net
– Community
• http://www.python.org/psa/bookstore/
– (alias for http://www.amk.ca/bookstore/)
– Python Bookstore
Slide 41 ©2001, 2002 Guido van Rossum
Further Reading
• Learning Python: Lutz, Ascher (O'Reilly '98)
• Python Essential Reference: Beazley (New Riders '99)
• Programming Python, 2nd Ed.: Lutz (O'Reilly '01)
• Core Python Programming: Chun (Prentice-Hall '00)
• The Quick Python Book: Harms, McDonald (Manning '99)
• The Standard Python Library: Lundh (O'Reilly '01)
• Python and Tkinter Programming: Grayson (Manning '00)
• Python Programming on Win32:
Hammond, Robinson (O'Reilly '00)
• Learn to Program Using Python: Gauld (Addison-W. '00)
• And many more titles...
TIME FOR QUESTIONS

introduction to python, fundamentals and basics

  • 1.
    Introduction to Python LinuxWorld- New York City - January 2002 Guido van Rossum Director of PythonLabs at Zope Corporation [email protected] [email protected]
  • 2.
    Slide 2 ©2001,2002 Guido van Rossum Why Python? • Have your cake and eat it, too: Productivity and readable code • VHLLs will gain on system languages (John Ousterhout) • "Life's better without braces" (Bruce Eckel)
  • 3.
    Slide 3 ©2001,2002 Guido van Rossum Tutorial Outline • interactive "shell" • basic types: numbers, strings • container types: lists, dictionaries, tuples • variables • control structures • functions & procedures • classes & instances • modules & packages • exceptions • files & standard library • what's new in Python 2.0 and beyond
  • 4.
    Slide 4 ©2001,2002 Guido van Rossum Try It Out! • If you brought a laptop into the classroom, feel free to play along • Download Python from www.python.org • Any version will do for this class – By and large they are all mutually compatible – Recommended version: 2.1.1 or 2.2 – Oldest version still in widespread use: 1.5.2 – Avoid 1.6/1.6.1 if you can – When using 2.0 or 2.1, upgrade to 2.0.1 / 2.1.1 – 2.1.2 is coming soon! • Use IDLE if you can
  • 5.
    Slide 5 ©2001,2002 Guido van Rossum Interactive “Shell” • Great for learning the language • Great for experimenting with the library • Great for testing your own modules • Two variations: IDLE (GUI), python (command line) • Type statements or expressions at prompt: >>> print "Hello, world" Hello, world >>> x = 12**2 >>> x/2 72 >>> # this is a comment
  • 6.
    Slide 6 ©2001,2002 Guido van Rossum Numbers • The usual suspects • 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 # 1./2. -> 0.5, float(1)/2 -> 0.5 • Will be fixed in the future • Long (arbitrary precision), complex • 2L**100 -> 1267650600228229401496703205376L – In Python 2.2 and beyond, 2**100 does the same thing • 1j**2 -> (-1+0j)
  • 7.
    Slide 7 ©2001,2002 Guido van Rossum 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, if etc" • 'single quotes' """triple quotes""" r"raw strings"
  • 8.
    Slide 8 ©2001,2002 Guido van Rossum Lists • Flexible arrays, not Lisp-like linked lists • a = [99, "bottles of beer", ["on", "the", "wall"]] • Same operators as for strings • a+b, a*3, a[0], a[-1], a[1:], len(a) • Item and slice assignment • a[0] = 98 • a[1:2] = ["bottles", "of", "beer"] -> [98, "bottles", "of", "beer", ["on", "the", "wall"]] • del a[-1] # -> [98, "bottles", "of", "beer"]
  • 9.
    Slide 9 ©2001,2002 Guido van Rossum 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, 42) # [42,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]
  • 10.
    Slide 10 ©2001,2002 Guido van Rossum Dictionaries • Hash tables, "associative arrays" • d = {"duck": "eend", "water": "water"} • Lookup: • d["duck"] -> "eend" • d["back"] # raises KeyError exception • Delete, insert, overwrite: • del d["water"] # {"duck": "eend", "back": "rug"} • d["back"] = "rug" # {"duck": "eend", "back": "rug"} • d["duck"] = "duik" # {"duck": "duik", "back": "rug"}
  • 11.
    Slide 11 ©2001,2002 Guido van Rossum More Dictionary Ops • 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"]}
  • 12.
    Slide 12 ©2001,2002 Guido van Rossum Dictionary Details • Keys must be immutable: – numbers, strings, tuples 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
  • 13.
    Slide 13 ©2001,2002 Guido van Rossum Tuples • key = (lastname, firstname) • point = x, y, z # parentheses optional • x, y, z = point # unpack • lastname = key[0] • singleton = (1,) # trailing comma!!! • empty = () # parentheses! • tuples vs. lists; tuples immutable
  • 14.
    Slide 14 ©2001,2002 Guido van Rossum Variables • No need to declare • Need to assign (initialize) • use of uninitialized variable raises exception • Not typed if friendly: greeting = "hello world" else: greeting = 12**2 print greeting • Everything is a "variable": • Even functions, classes, modules
  • 15.
    Slide 15 ©2001,2002 Guido van Rossum Reference Semantics • Assignment manipulates references • x = 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]
  • 16.
    Slide 16 ©2001,2002 Guido van Rossum 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
  • 17.
    Slide 17 ©2001,2002 Guido van Rossum a 1 b a 1 b a = 1 a = a+1 b = a a 1 2 Changing an Integer old reference deleted by assignment (a=...) new int object created by add operator (1+1)
  • 18.
    Slide 18 ©2001,2002 Guido van Rossum Control Structures if condition: statements [elif condition: statements] ... else: statements while condition: statements for var in sequence: statements break continue
  • 19.
    Slide 19 ©2001,2002 Guido van Rossum Grouping Indentation In Python: for i in range(20): if i%3 == 0: print i if i%5 == 0: print "Bingo!" print "---" In C: for (i = 0; i < 20; i++) { if (i%3 == 0) { printf("%dn", i); if (i%5 == 0) { printf("Bingo!n"); } } printf("---n"); } 0 Bingo! --- --- --- 3 --- --- --- 6 --- --- --- 9 --- --- --- 12 --- --- --- 15 Bingo! --- --- --- 18 --- ---
  • 20.
    Slide 20 ©2001,2002 Guido van Rossum Functions, Procedures def name(arg1, arg2, ...): """documentation""" # optional doc string statements return # from procedure return expression # from function
  • 21.
    Slide 21 ©2001,2002 Guido van Rossum 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
  • 22.
    Slide 22 ©2001,2002 Guido van Rossum Classes class name: "documentation" statements -or- class name(base1, base2, ...): ... Most, statements are method definitions: def name(self, arg1, arg2, ...): ... May also be class variable assignments
  • 23.
    Slide 23 ©2001,2002 Guido van Rossum 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
  • 24.
    Slide 24 ©2001,2002 Guido van Rossum Using Classes • To create an instance, simply call the class object: x = Stack() # no 'new' operator! • 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]
  • 25.
    Slide 25 ©2001,2002 Guido van Rossum 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]
  • 26.
    Slide 26 ©2001,2002 Guido van Rossum Subclassing (2) 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
  • 27.
    Slide 27 ©2001,2002 Guido van Rossum 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
  • 28.
    Slide 28 ©2001,2002 Guido van Rossum Instance Variable Rules • On use via instance (self.x), search order: – (1) instance, (2) class, (3) base classes – this also works for method lookup • On assignment via instance (self.x = ...): – always makes an instance variable • Class variables "default" for instance variables • But...! – mutable class variable: one copy shared by all – mutable instance variable: each instance its own
  • 29.
    Slide 29 ©2001,2002 Guido van Rossum Modules • Collection of stuff in foo.py file – functions, classes, variables • Importing modules: – import re; print re.match("[a-z]+", s) – from re import match; print match("[a-z]+", s) • Import with rename: – import re as regex – from re import match as m – Before Python 2.0: • import re; regex = re; del re
  • 30.
    Slide 30 ©2001,2002 Guido van Rossum 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() – import P.Q.M as M; print M.foo() # new
  • 31.
    Slide 31 ©2001,2002 Guido van Rossum Catching Exceptions def foo(x): return 1/x def bar(x): try: print foo(x) except ZeroDivisionError, message: print "Can’t divide by zero:", message bar(0)
  • 32.
    Slide 32 ©2001,2002 Guido van Rossum Try-finally: Cleanup f = open(file) try: process_file(f) finally: f.close() # always executed print "OK" # executed on success only
  • 33.
    Slide 33 ©2001,2002 Guido van Rossum Raising Exceptions • raise IndexError • raise IndexError("k out of range") • raise IndexError, "k out of range" • try: something except: # catch everything print "Oops" raise # reraise
  • 34.
    Slide 34 ©2001,2002 Guido van Rossum More on Exceptions • User-defined exceptions – subclass Exception or any other standard exception • Old Python: exceptions can be strings – WATCH OUT: compared by object identity, not == • Last caught exception info: – sys.exc_info() == (exc_type, exc_value, exc_traceback) • Last uncaught exception (traceback printed): – sys.last_type, sys.last_value, sys.last_traceback • Printing exceptions: traceback module
  • 35.
    Slide 35 ©2001,2002 Guido van Rossum File Objects • f = open(filename[, mode[, buffersize]) – mode can be "r", "w", "a" (like C stdio); default "r" – append "b" for text translation mode – append "+" for read/write open – buffersize: 0=unbuffered; 1=line-buffered; buffered • methods: – read([nbytes]), readline(), readlines() – write(string), writelines(list) – seek(pos[, how]), tell() – flush(), close() – fileno()
  • 36.
    Slide 36 ©2001,2002 Guido van Rossum Standard Library • Core: – os, sys, string, getopt, StringIO, struct, pickle, ... • Regular expressions: – re module; Perl-5 style patterns and matching rules • Internet: – socket, rfc822, httplib, htmllib, ftplib, smtplib, ... • Miscellaneous: – pdb (debugger), profile+pstats – Tkinter (Tcl/Tk interface), audio, *dbm, ...
  • 37.
    Slide 37 ©2001,2002 Guido van Rossum Python 2.0: What's New • Augmented assignment: x += y • List comprehensions: [s.strip() for s in f.readlines()] • Extended print: print >>sys.stderr, "Hello!" • Extended import: import foo as bar • Unicode strings: u"u1234" • New re implementation (faster, Unicode) • Collection of cyclic garbage • XML, distutils
  • 38.
    Slide 38 ©2001,2002 Guido van Rossum Python 2.1: What's New • From __future__ import nested_scopes – def make_adder(n): def adder(x): return x+n return adder – add2 = make_adder(2) – add2(10) == 12 • Rich comparisons – Overload <, <=, ==, !=, >=, > separately • Warnings framework – Prepare for the future
  • 39.
    Slide 39 ©2001,2002 Guido van Rossum Python 2.2: What's New • Iterators and Generators • from __future__ import generators def inorder(tree): if tree: for x in inorder(tree.left): yield x yield tree.label for x in inorder(tree.right): yield x • Type/class unification – class mydict(dict): … • Fix division operator so 1/2 == 0.5; 1//2 == 0 – Requires __future__ statement in Python 2.x – Change will be permanent in Python 3.0
  • 40.
    Slide 40 ©2001,2002 Guido van Rossum URLs • http://www.python.org – official site • http://starship.python.net – Community • http://www.python.org/psa/bookstore/ – (alias for http://www.amk.ca/bookstore/) – Python Bookstore
  • 41.
    Slide 41 ©2001,2002 Guido van Rossum Further Reading • Learning Python: Lutz, Ascher (O'Reilly '98) • Python Essential Reference: Beazley (New Riders '99) • Programming Python, 2nd Ed.: Lutz (O'Reilly '01) • Core Python Programming: Chun (Prentice-Hall '00) • The Quick Python Book: Harms, McDonald (Manning '99) • The Standard Python Library: Lundh (O'Reilly '01) • Python and Tkinter Programming: Grayson (Manning '00) • Python Programming on Win32: Hammond, Robinson (O'Reilly '00) • Learn to Program Using Python: Gauld (Addison-W. '00) • And many more titles...
  • 42.