Python%20Intro,%20Concurrency - PowerPoint PPT Presentation

About This Presentation
Title:

Python%20Intro,%20Concurrency

Description:

Other types for e.g. binary data, regular expressions, ... Integer division truncates :-( 1/2 - 0 # float(1)/2 - 0.5. Long (arbitrary precision), complex ... – PowerPoint PPT presentation

Number of Views:154
Avg rating:3.0/5.0
Slides: 40
Provided by: seifh
Learn more at: http://www.cs.rpi.edu
Category:

less

Transcript and Presenter's Notes

Title: Python%20Intro,%20Concurrency


1
Python Intro, Concurrency
  • Carlos Varela
  • RPI
  • Adapted with permission from
  • Guido van Rossum
  • www.python.org

2
What is Python?
  • O-O HL rapid prototyping language
  • Not just a scripting language
  • Not just another Perl
  • Extensible (add new modules)
  • C/C/Fortran/whatever
  • Java (through JPython)
  • Embeddable in applications

3
Language properties
  • Almost everything is an object
  • Modules, classes, functions
  • Exception handling
  • Dynamic typing, polymorphism
  • Static scoping
  • Operator overloading
  • Indentation for block structure

4
High-level data types
  • Numbers int, long, float, complex
  • Strings immutable
  • Lists and dictionaries containers
  • Other types for e.g. binary data, regular
    expressions, introspection
  • Extension modules can define new built-in data
    types

5
Tutorial Outline
  • 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

6
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
  • gtgtgt print "Hello, world"
  • Hello, world
  • gtgtgt x 122
  • gtgtgt x/2
  • 72
  • gtgtgt this is a comment

7
Numbers
  • The usual notations and operators
  • 12, 3.14, 0xFF, 0377, (-12)3/45, abs(x),
    0ltxlt5
  • C-style shifting masking
  • 1ltlt16, x0xff, x1, x, xy
  • Integer division truncates -(
  • 1/2 -gt 0 float(1)/2 -gt 0.5
  • Long (arbitrary precision), complex
  • 2L100 -gt 1267650600228229401496703205376L
  • 1j2 -gt (-10j)

8
Strings
  • "hello""world" "helloworld" concatenation
  • "hello"3 "hellohellohello repetition
  • "hello"0 "h" indexing
  • "hello"-1 "o" (from end)
  • "hello"14 "ell" slicing
  • len("hello") 5 size
  • "hello" lt "jello" 1 comparison
  • "e" in "hello" 1 search
  • "escapes \n etc, \033 etc, \xff etc"
  • 'single quotes' '''triple quotes''' r"raw strings"

9
Lists
  • a 99, "bottles of beer", "on", "the",
    "wall"
  • Flexible arrays, not Lisp-like linked lists
  • Same operators as for strings
  • ab, a3, a0, a-1, a1, len(a)
  • Item and slice assignment
  • a0 98
  • a12 "bottles, of", "beer"
  • -gt 98, "bottles", "of", "beer", "on", "the",
    "wall"
  • del a-1 -gt 98, "bottles", "of", "beer"

10
More list operations
  • gtgtgt a range(5) 0,1,2,3,4
  • gtgtgt a.append(5) 0,1,2,3,4,5
  • gtgtgt a.pop() 0,1,2,3,4
  • 5
  • gtgtgt a.insert(0, 5.5) 5.5,0,1,2,3,4
  • gtgtgt a.pop(0) 0,1,2,3,4
  • 5.5
  • gtgtgt a.reverse() 4,3,2,1,0
  • gtgtgt a.sort() 0,1,2,3,4

11
Dictionaries
  • Hash tables, "associative arrays"
  • d "duck" "eend", "water" "water"
  • Lookup
  • d"duck" -gt "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"

12
More dictionary ops
  • Keys, values, items
  • d.keys() -gt "duck", "back"
  • d.values() -gt "duik", "rug"
  • d.items() -gt ("duck","duik"), ("back","rug")
  • Presence check
  • d.has_key("duck") -gt True d.has_key("spam") -gt
    False
  • Values of any type keys almost any
  • "name""Guido", "age"43, ("hello","world")1,
    42"yes", "flag" "red","white","blue"

13
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

14
Tuples
  • key (lastname, firstname)
  • point x, y, z parens optional
  • x, y, z point
  • lastname key0
  • singleton (1,) trailing comma!
  • empty () parentheses!
  • tuples vs. lists tuples immutable

15
Variables
  • No need to declare
  • Need to assign (initialize)
  • use of uninitialized variable raises exception
  • Not typed
  • if friendly greeting "hello world"
  • else greeting 122
  • print greeting
  • Everything is first-class
  • functions, modules, classes

16
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
  • gtgtgt a 1, 2, 3 b a
  • gtgtgt a.append(4) print b
  • 1, 2, 3, 4

17
Changing a shared list
a 1, 2, 3
b a
a
1
2
3
4
a.append(4)
b
18
Changing an integer
a 1
a
1
b a
b
new int object created by add operator (11)
2
a
a a1
old reference deleted by assignment (a...)
1
b
19
Control structures
  • if condition
  • statements
  • elif condition
  • statements ...
  • else
  • statements
  • while condition
  • statements
  • for var in sequence
  • statements
  • break
  • continue

20
Grouping indentation
0 Bingo! --- --- --- 3 --- --- --- 6 --- --- --- 9
--- --- --- 12 --- --- --- 15 Bingo! --- --- ---
18 --- ---
  • Python
  • for i in range(20)
  • if i3 0
  • print i
  • if i5 0
  • print "Bingo!"
  • print "---"
  • C
  • for (i 0 i lt 20 i)
  • if (i3 0)
  • printf("d\n", i)
  • if (i5 0)
  • printf("Bingo!\n")
  • printf("---\n")

21
Functions, procedures
  • def name(arg1, arg2, ...)
  • "documentation" optional
  • statements
  • return from procedure
  • return expression from function

22
Example function
  • def gcd(a, b)
  • "greatest common divisor"
  • while a ! 0
  • a, b ba, a parallel assignment
  • return b
  • gtgtgt gcd.__doc__
  • 'greatest common divisor'
  • gtgtgt gcd(12, 20)
  • 4

23
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

24
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)
  • return self.items.pop() what happens
    if its empty?
  • def empty(self)
  • return len(self.items) 0 Boolean
    result

25
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() -gt 1
  • x.push(1) 1
  • x.empty() -gt 0
  • x.push("hello") 1, "hello"
  • x.pop() -gt "hello" 1
  • To inspect instance variables, use dot notation
  • x.items -gt 1

26
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 lt -n lt size test
    precondition
  • return self.itemsn-1

27
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) lt self.limit
  • FancyStack.push(self, x) "super"
    method call

28
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

29
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 assigment 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

30
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
  • import string as s equivalent

31
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()

32
Catching Exceptions
  • try
  • print 1/x
  • except ZeroDivisionError, message
  • print "Cant divide by zero"
  • print message

33
Try-Finally Cleanup
  • f open(file)
  • try
  • process_file(f)
  • finally
  • f.close() always executed
  • print "OK" executed on success only

34
Raising Exceptions
  • raise IndexError
  • raise IndexError("k out of range")
  • raise IndexError, "k out of range
  • try somethingexcept catch everything
    print "Oops" raise reraise

35
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 0unbuffered 1line-buffered
    buffered
  • methods
  • read(nbytes), readline(), readlines()
  • write(string), writelines(list)
  • seek(pos, how), tell()
  • flush(), close()
  • fileno()

36
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), profilepstats
  • Tkinter (Tcl/Tk interface), audio, dbm, ...

37
Threads and Objects
  • Import threading module
  • Extend threading.Thread class
  • Override run(self) method
  • Start new objects invoking start() method.

38
Thread Example
  • import threading
  • class PrintThread(threading.Thread)
  • def __init__(self,frequency,name)
  • self.frequencyfrequency
  • self.namename
  • threading.Thread.__init__(self)
  • def run(self)
  • for i in range(self.frequency)
  • print self.name
  • for t in range(10)
  • PrintThread(t,t).start()

39
Exercises
  • Can Python objects have private instance
    variables?
  • What is the semantics of a method definition
    which does not include self as the first
    argument?
  • Why are some class methods and variables called
    __xxx__?
  • Can Python (optionally) use brackets for block
    structure?
  • Is there a shallow and deep copy method?
  • a1,2 b a c deep_copy(a) d
    shallow_copy(a)
  • a0 hi does not affect c,d
  • c1 3 does not affect a,b,d
  • d1 4 does not affect c
  • d0 2 does not affect a,b,c
Write a Comment
User Comments (0)
About PowerShow.com