[go: up one dir, main page]

0% found this document useful (0 votes)
168 views40 pages

Python

Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1/ 40

Introduction to Python

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
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
Numbers
 The usual suspects
 12, 3.14, 0xFF, 0377, (-1+2)*3/4**5, abs(x), 0<x<=5
 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)
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"
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"]
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]
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"}
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"]}
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
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
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
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]
Changing a Shared List
a = [1, 2, 3] a 1 2 3

a
b=a 1 2 3
b

a
a.append(4) 1 2 3 4
b
Changing an aInteger
a=1 1

a
b=a 1
b new int object created
by add operator (1+1)

a 2
a = a+1 old reference deleted
by assignment (a=...)
b 1
Control Structures
if condition: while condition:
statements statements

[elif condition: for var in sequence:


statements] ... statements

else: break
statements continue
Grouping Indentation 0
Bingo!
---
---
---
In Python: In C:
3
---
---
---
6
for i in range(20): for (i = 0; i < 20; i++) ---
---
if i%3 == 0: { ---
9
print i if (i%3 == 0) { ---
---
if i%5 == 0: printf("%d\n", i); ---
12
print "Bingo!" if (i%5 == 0) { ---
---
printf("Bingo!\n"); } ---
print "---" 15
} Bingo!
---
printf("---\n"); ---
---
} 18
---
---
Functions, Procedures
def name(arg1, arg2, ...):
"""documentation""" # optional doc string
statements

return # from procedure


return expression # from function
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
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
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
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]
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]
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
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
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
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
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
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)
Try-finally: Cleanup
f = open(file)
try:
process_file(f)
finally:
f.close() # always executed
print "OK" # executed on success only
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
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


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()
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, ...
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
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
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
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
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

You might also like