SlideShare a Scribd company logo
Introduction to Python
A dynamically typed programming language
allowing multiple paradigms – OO, functional


                       Narendran Thangarajan,
                       @naren_live
                       SSN College of Engg,
                       Chennai
Why Python?


   Productivity and readable code


   Dynamic Type system


   Automatic Memory Mangement


   No braces : "Life's better without braces"
    (Bruce Eckel)
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
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

   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)
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 Integer


 a=1        a      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] ...
else:                 statements
  statements        break

                    continue
Grouping Indentation


In Python:              In C:

                        for (i = 0; i < 20; i++)
for i in range(20):
  if i%3 == 0:          {

     print i                if (i%3 == 0) {
     if i%5 == 0:
                                 printf("%dn", i);
       print "Bingo!"
  print "---"                    if (i%5 == 0) {

                                   printf("Bingo!n"); }

                             }

                             printf("---n");

                        }
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
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()
Thank You!

More Related Content

PPTX
Benefits of Kotlin
PDF
RxSwift 시작하기
KEY
Exhibition of Atrocity
PDF
Scala for Java Developers - Intro
PDF
Slides chapter3part1 ruby-forjavaprogrammers
PPTX
Scala best practices
PDF
A tour of Python
PDF
Beginners python cheat sheet - Basic knowledge
 
Benefits of Kotlin
RxSwift 시작하기
Exhibition of Atrocity
Scala for Java Developers - Intro
Slides chapter3part1 ruby-forjavaprogrammers
Scala best practices
A tour of Python
Beginners python cheat sheet - Basic knowledge
 

What's hot (20)

PDF
Analysis of Fatal Utah Avalanches with Python. From Scraping, Analysis, to In...
ODP
How to Become a Tree Hugger: Random Forests and Predictive Modeling for Devel...
PPT
SDC - Einführung in Scala
PPT
Scala presentation by Aleksandar Prokopec
PDF
Swift 함수 커링 사용하기
PDF
Scala vs Java 8 in a Java 8 World
PDF
A limited guide to intermediate and advanced Ruby
PPTX
Python 표준 라이브러리
PPTX
Groovy grails types, operators, objects
PDF
Is Haskell an acceptable Perl?
ODP
Scala introduction
PDF
Haskell in the Real World
PDF
여자개발자모임터 6주년 개발 세미나 - Scala Language
PDF
PHP Language Trivia
ODP
Patterns for slick database applications
PDF
Python Puzzlers
PPTX
Basics of Python programming (part 2)
PPTX
Groovy vs Boilerplate and Ceremony Code
PDF
Model-Driven Software Development - Static Analysis & Error Checking
PDF
Hammurabi
Analysis of Fatal Utah Avalanches with Python. From Scraping, Analysis, to In...
How to Become a Tree Hugger: Random Forests and Predictive Modeling for Devel...
SDC - Einführung in Scala
Scala presentation by Aleksandar Prokopec
Swift 함수 커링 사용하기
Scala vs Java 8 in a Java 8 World
A limited guide to intermediate and advanced Ruby
Python 표준 라이브러리
Groovy grails types, operators, objects
Is Haskell an acceptable Perl?
Scala introduction
Haskell in the Real World
여자개발자모임터 6주년 개발 세미나 - Scala Language
PHP Language Trivia
Patterns for slick database applications
Python Puzzlers
Basics of Python programming (part 2)
Groovy vs Boilerplate and Ceremony Code
Model-Driven Software Development - Static Analysis & Error Checking
Hammurabi
Ad

Viewers also liked (7)

PDF
Android application development
PDF
Routing basics
PDF
A primer on network devices
PDF
Network switching
PDF
Bioinformatics for Computer Scientists
PDF
Airline reservation system db design
PDF
Technology Quiz
Android application development
Routing basics
A primer on network devices
Network switching
Bioinformatics for Computer Scientists
Airline reservation system db design
Technology Quiz
Ad

Similar to Introduction to Python (20)

PPT
python within 50 page .ppt
PPTX
GE8151 Problem Solving and Python Programming
PPT
python language programming presentation
PDF
Intro to Python
PPTX
Python Workshop - Learn Python the Hard Way
PDF
Python idiomatico
PDF
Pydiomatic
PDF
(How) can we benefit from adopting scala?
PDF
An overview of Python 2.7
PDF
Python_Cheat_Sheet_Keywords_1664634397.pdf
PDF
Python_Cheat_Sheet_Keywords_1664634397.pdf
PDF
Meet scala
KEY
Clojure Intro
PDF
A Few of My Favorite (Python) Things
PDF
From Java to Scala - advantages and possible risks
PPTX
P3 2018 python_regexes
PDF
Snakes for Camels
PDF
Functional programming in ruby
PDF
Funkcija, objekt, python
PPT
Python in 90mins
python within 50 page .ppt
GE8151 Problem Solving and Python Programming
python language programming presentation
Intro to Python
Python Workshop - Learn Python the Hard Way
Python idiomatico
Pydiomatic
(How) can we benefit from adopting scala?
An overview of Python 2.7
Python_Cheat_Sheet_Keywords_1664634397.pdf
Python_Cheat_Sheet_Keywords_1664634397.pdf
Meet scala
Clojure Intro
A Few of My Favorite (Python) Things
From Java to Scala - advantages and possible risks
P3 2018 python_regexes
Snakes for Camels
Functional programming in ruby
Funkcija, objekt, python
Python in 90mins

More from UC San Diego (15)

PDF
Datacenter traffic demand characterization
PDF
Smart Homes, Buildings and Internet-of-things
PDF
Social Networks analysis to characterize HIV at-risk populations - Progress a...
PDF
eyeTalk - A system for helping people affected by motor neuron problems
PDF
Pirc net poster
PDF
Ajaxism
PDF
Basic terminologies for a developer
PDF
Fields in computer science
PDF
Understanding computer networks
PDF
FOSS Introduction
PDF
Network Programming with Umit project
PDF
Workshop on Network Security
PPTX
Socket programming in Java (PPTX)
PDF
Socket programming using java
PDF
Pervasive Web Application Architecture
Datacenter traffic demand characterization
Smart Homes, Buildings and Internet-of-things
Social Networks analysis to characterize HIV at-risk populations - Progress a...
eyeTalk - A system for helping people affected by motor neuron problems
Pirc net poster
Ajaxism
Basic terminologies for a developer
Fields in computer science
Understanding computer networks
FOSS Introduction
Network Programming with Umit project
Workshop on Network Security
Socket programming in Java (PPTX)
Socket programming using java
Pervasive Web Application Architecture

Recently uploaded (20)

PDF
ANTIBIOTICS.pptx.pdf………………… xxxxxxxxxxxxx
PDF
O7-L3 Supply Chain Operations - ICLT Program
PPTX
Nursing Management of Patients with Disorders of Ear, Nose, and Throat (ENT) ...
PDF
Electrolyte Disturbances and Fluid Management A clinical and physiological ap...
PDF
From loneliness to social connection charting
PDF
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
PDF
3rd Neelam Sanjeevareddy Memorial Lecture.pdf
PPTX
Introduction_to_Human_Anatomy_and_Physiology_for_B.Pharm.pptx
PDF
102 student loan defaulters named and shamed – Is someone you know on the list?
PDF
Mark Klimek Lecture Notes_240423 revision books _173037.pdf
DOCX
UPPER GASTRO INTESTINAL DISORDER.docx
PDF
English Language Teaching from Post-.pdf
PDF
STATICS OF THE RIGID BODIES Hibbelers.pdf
PPTX
Introduction and Scope of Bichemistry.pptx
PPTX
human mycosis Human fungal infections are called human mycosis..pptx
PPTX
COMPUTERS AS DATA ANALYSIS IN PRECLINICAL DEVELOPMENT.pptx
PPTX
Week 4 Term 3 Study Techniques revisited.pptx
PDF
Business Ethics Teaching Materials for college
PDF
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
PDF
The Final Stretch: How to Release a Game and Not Die in the Process.
ANTIBIOTICS.pptx.pdf………………… xxxxxxxxxxxxx
O7-L3 Supply Chain Operations - ICLT Program
Nursing Management of Patients with Disorders of Ear, Nose, and Throat (ENT) ...
Electrolyte Disturbances and Fluid Management A clinical and physiological ap...
From loneliness to social connection charting
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
3rd Neelam Sanjeevareddy Memorial Lecture.pdf
Introduction_to_Human_Anatomy_and_Physiology_for_B.Pharm.pptx
102 student loan defaulters named and shamed – Is someone you know on the list?
Mark Klimek Lecture Notes_240423 revision books _173037.pdf
UPPER GASTRO INTESTINAL DISORDER.docx
English Language Teaching from Post-.pdf
STATICS OF THE RIGID BODIES Hibbelers.pdf
Introduction and Scope of Bichemistry.pptx
human mycosis Human fungal infections are called human mycosis..pptx
COMPUTERS AS DATA ANALYSIS IN PRECLINICAL DEVELOPMENT.pptx
Week 4 Term 3 Study Techniques revisited.pptx
Business Ethics Teaching Materials for college
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
The Final Stretch: How to Release a Game and Not Die in the Process.

Introduction to Python

  • 1. Introduction to Python A dynamically typed programming language allowing multiple paradigms – OO, functional Narendran Thangarajan, @naren_live SSN College of Engg, Chennai
  • 2. Why Python?  Productivity and readable code  Dynamic Type system  Automatic Memory Mangement  No braces : "Life's better without braces" (Bruce Eckel)
  • 3. 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
  • 4. 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
  • 5. 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)
  • 6. 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"
  • 7. 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"]
  • 8. 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]
  • 9. 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"}
  • 10. 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"]}
  • 11. 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
  • 12. 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
  • 13. 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
  • 14. 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]
  • 15. 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
  • 16. Changing an Integer a=1 a 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
  • 17. Control Structures if condition: while condition: statements statements [elif condition: for var in sequence: statements] ... else: statements statements break continue
  • 18. Grouping Indentation In Python: In C: for (i = 0; i < 20; i++) for i in range(20): if i%3 == 0: { print i if (i%3 == 0) { if i%5 == 0: printf("%dn", i); print "Bingo!" print "---" if (i%5 == 0) { printf("Bingo!n"); } } printf("---n"); }
  • 19. Functions, Procedures def name(arg1, arg2, ...): """documentation""" # optional doc string statements return # from procedure return expression # from function
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. 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]
  • 24. 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]
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. 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)
  • 31. Try-finally: Cleanup f = open(file) try: process_file(f) finally: f.close() # always executed print "OK" # executed on success only
  • 32. 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
  • 33. 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()