Python chrysn <chrysn@fsfe.org> 2008-09-25 Introduction - - PowerPoint PPT Presentation

python
SMART_READER_LITE
LIVE PREVIEW

Python chrysn <chrysn@fsfe.org> 2008-09-25 Introduction - - PowerPoint PPT Presentation

Python chrysn <chrysn@fsfe.org> 2008-09-25 Introduction Structure, Language & Syntax Strengths & Weaknesses Introduction Structure, Language & Syntax Strengths & Weaknesses Python Python is an interpreted,


slide-1
SLIDE 1

Python

chrysn <chrysn@fsfe.org> 2008-09-25

slide-2
SLIDE 2

Introduction Structure, Language & Syntax Strengths & Weaknesses

slide-3
SLIDE 3

Introduction Structure, Language & Syntax Strengths & Weaknesses

slide-4
SLIDE 4

Python

Python is an interpreted, object-oriented, high-level programming language with dynamic semantics. interpreted stack based byte code; JIT available; restricted subset compilable

  • bject-oriented every expression returns an object

high-level “readable pseudo-code” dynamic semantics ? (suggestions welcome)

slide-5
SLIDE 5

Facts & Figures

inventor & BDFL Guido van Rossum influenced by ABC, ALGOL 68, C, Haskell, Icon, Lisp, Modula-3, Perl, Java current version 2.5.2 (2008-02-22) looking forward to Python 3 in October currently used by NASA, CERN, Yahoo, Google, YouTube currently used in Blender, Mailman, Gentoo Linux, scons, Zope

slide-6
SLIDE 6

Introduction Structure, Language & Syntax Strengths & Weaknesses

slide-7
SLIDE 7

Structure

◮ Every Python file (*.py) is a Python module.

slide-8
SLIDE 8

Structure

◮ Every Python file (*.py) is a Python module. ◮ Python modules contain statements.

1 name = ” world ” 2 print ” h e l l o ” 3 print name

slide-9
SLIDE 9

Structure

◮ Every Python file (*.py) is a Python module. ◮ Python modules contain statements. ◮ Statements can contain indented clauses, which contain other

statements. 1 pi = 3 2 i f pi > 3: 3 print ” pi > 3” 4 else : 5 print ” pi <= 3”

slide-10
SLIDE 10

Structure

◮ Every Python file (*.py) is a Python module. ◮ Python modules contain statements. ◮ Statements can contain indented clauses, which contain other

statements.

◮ Stamements can contain expressions.

1 pi = 3 2 i f pi > 3: 3 print ” pi > 3” 4 else : 5 print ” pi <= 3”

slide-11
SLIDE 11

Structure

◮ Every Python file (*.py) is a Python module. ◮ Python modules contain statements. ◮ Statements can contain indented clauses, which contain other

statements.

◮ Stamements can contain expressions. ◮ An expession is a valid statement.

1 window . show () 2 3 m y l i s t . append (42) 4 m y l i s t . s o r t ()

slide-12
SLIDE 12

Structure

◮ Every Python file (*.py) is a Python module. ◮ Python modules contain statements. ◮ Statements can contain indented clauses, which contain other

statements.

◮ Stamements can contain expressions. ◮ An expession is a valid statement. ◮ Every expression can be evaluated to an object.

1 # f u n c t i o n that p r i n t s a number squared 2 def f ( x ) : 3 print x ∗∗ 2 4 5 print f 6 # <f u n c t i o n f at 0 x7f1e43f439b0> 7 print f (2) 8 # 4 9 # None

slide-13
SLIDE 13

Statements: Functions (1/2)

1 def move( s t a r t , end , v e l o c i t y =1): 2 return ( end−s t a r t )/ v e l o c i t y 3 4 t = move (0 , 1) # e q u i v a l e n t : 5 t = move (0 , 1 , 1) 6 t = move( v e l o c i t y =1, s t a r t =0, end=1) 7 8 # anonymous f u n c t i o n 9 t = (lambda s , e , v=1: ( e−s )/ v )(0 , 1)

◮ Arguments can have default values ◮ (Default arguments are evaluated when function is defined) ◮ Can use positional or named arguments ◮ Implicit return None ◮ lambda: anonymous functions, one expression only

slide-14
SLIDE 14

Statements: Functions (2/2)

1 def l o g g i n g ( f u n c t i o n ) : 2 def decorated (∗ args , ∗∗ kwords ) : 3 print f u n c t i o n . name , args , kwords 4 f u n c t i o n (∗ args , ∗∗ kwords ) 5 return decorated 6 7 @logging 8 def move( s t a r t , end , v e l o c i t y =1): 9 ””” C a l c u l a t e time needed to move””” 10 return ( end−s t a r t )/ v e l o c i t y

◮ *something is list of positional arguments ◮ **something is dictionary of keyword arguments ◮ @decorator passes function through another function before

it is assigned to its name

slide-15
SLIDE 15

Statements: Control Structures

◮ for: Iteration over iterable object

1 for i in range (99 , 1 , −1): 2 print ”%d b o t t l e s

  • f

beer . . . ” % i

slide-16
SLIDE 16

Statements: Control Structures

◮ for: Iteration over iterable object ◮ while: Loop while condition is true (no assignments)

1 while time . time () < end time : 2 # can do another round

  • f

c a l c u l a t i o n s 3 calculateAnotherRound ()

slide-17
SLIDE 17

Statements: Control Structures

◮ for: Iteration over iterable object ◮ while: Loop while condition is true (no assignments) ◮ else clause for loops: executed unless break was used.

1 for p in PATH: 2 j o i n t = os . path . j o i n (p , filename ) 3 i f

  • s . path . e x i s t s ( j o i n t ) :

4 print ” found as %s ” % j o i n t 5 break 6 else : 7 r a i s e Exception ( ”Not found in PATH. ” )

slide-18
SLIDE 18

Statements: Control Structures

◮ for: Iteration over iterable object ◮ while: Loop while condition is true (no assignments) ◮ else clause for loops: executed unless break was used. ◮ if: Condition; used with elif as a replacement for

Switch/Case constructs 1 i f spam score < 3: 2 print ” Probably ham . ” 3 e l i f spam score < 6: 4 print ”Might be spam . ” 5 else : 6 print ” probably spam . ”

slide-19
SLIDE 19

Statements: Control Structures

◮ for: Iteration over iterable object ◮ while: Loop while condition is true (no assignments) ◮ else clause for loops: executed unless break was used. ◮ if: Condition; used with elif as a replacement for

Switch/Case constructs

◮ try / except / else finally: Exception handling

1 try : 2 l o g f i l e = open ( logfilename , ’w ’ ) 3 except IOError : 4 print ”Cannot open log ; l o g g i ng d i s a b l e d . ” 5 l o g g i n g = False

slide-20
SLIDE 20

Object Model

◮ Every Python object has

◮ an identity (think memory address) ◮ a type (an object) ◮ a value (e. g. property values)

◮ Behavior can be defined by metaclass (class’s class), class or

  • bject

◮ There are no methods, only object bound functions

slide-21
SLIDE 21

Basic objects & classes – general

None think NULL, nil etc; distinct from unbound name int Integer, C’s long; transparently changes to arbitrarily long integers bool True and False; subclasses of 1 and 0 float just that, C’s double complex two doubles; 1j * 1j == -1 str Byte sequences, immutable, always interned. Have built in “sprintf” support by overloading the %

  • perator:

1 ” Operation took %.5 f seconds ” % math . pi 2 3 ( ”There are %(count )d days in %(name) ” ) % \ 4 { ’name ’ : ’ December ’ , ’ count ’ :31}

slide-22
SLIDE 22

Basic objects & classes – containers

tuple immutable list; created by (expr1, expr2, expr3); parentheses optional 1 coords = ( x , y ) 2 normal = ( coords [ 1 ] , −coords [ 0 ] ) 3 4 # i m p l i c i t l y used f o r swapping 5 a , b = b , a 6 7 mixed = (1 , ”spam” , Eggs ( ) )

slide-23
SLIDE 23

Basic objects & classes – containers

tuple immutable list; created by (expr1, expr2, expr3); parentheses optional list mutable list; created by [expr1, expr2, expr3] 1 m y l i s t = [1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9] 2 m y l i s t . append (10) 3 4 m y l i s t [ 1 : 3 ] = m y l i s t [ 5 : 1 0 : 2 ]

slide-24
SLIDE 24

Basic objects & classes – containers

tuple immutable list; created by (expr1, expr2, expr3); parentheses optional list mutable list; created by [expr1, expr2, expr3] dict key/value pairs without sequence 1 d i c t i o n a r y = {” h e l l o ” : ” h a l l o ” , ” water ” : 2 ” wasser ” , 42: ” z w e i u n d v i e r z i g ”} 3 4 # a l t e r n a t i v e c o n s t r u c t i o n 5 d i c t i o n a r y = d i c t ( h e l l o=” h a l l o ” , 6 water=” wasser ” ) 7 8 print d i c t [ ’ h e l l o ’ ]

slide-25
SLIDE 25

Basic objects & classes – containers

tuple immutable list; created by (expr1, expr2, expr3); parentheses optional list mutable list; created by [expr1, expr2, expr3] dict key/value pairs without sequence

  • no built in type for plain numeric arrays
slide-26
SLIDE 26

Class Example

1 class Cart ( o b j e c t ) : 2 ”””The t y p i c a l shopping c a r t c l a s s example ””” 3 def i n i t ( s e l f ) : 4 s e l f . c l e a r () 5 6 def add ( s e l f , what , qty =1): 7 i f what in s e l f . q u a n t i t i e s : 8 s e l f . q u a n t i t i e s [ what ] += qty 9 else : 10 s e l f . q u a n t i t i e s [ what ] = qty 11 12 def c l e a r ( s e l f ) : 13 s e l f . q u a n t i t i e s = {}

slide-27
SLIDE 27

Classes 1/2

Creation by keyword class and parent classes 1 class Jackalope ( Jackrabbit , Antelope ) : pass 2 3 class Prime ( i n t ) : pass 4 5 class SomethingNew ( o b j e c t ) : pass 6 7 # bad : summons ghosts from the past 8 class SomethingOld : pass

slide-28
SLIDE 28

Classes 1/2

Creation by keyword class and parent classes Constructor init takes self like every other method 1 def Jackalope ( Jackrabbit , Antelope ) : 2 def i n i t ( s e l f , amount antelope =0.5): 3 s e l f . amount antelope = amount antelope

slide-29
SLIDE 29

Classes 1/2

Creation by keyword class and parent classes Constructor init takes self like every other method Attribute access as self.attribute, accessible from everywhere 1 def Jackalope ( Jackrabbit , Antelope ) : 2 def i n i t ( s e l f , amount antelope =0.5): 3 s e l f . amount antelope = amount antelope

slide-30
SLIDE 30

Classes 1/2

Creation by keyword class and parent classes Constructor init takes self like every other method Attribute access as self.attribute, accessible from everywhere private attributes are created by prepending

  • r

1 class Animal ( o b j e c t ) : 2 def i n i t ( s e l f , father , mother ) : 3 s e l f . f a t h e r = f a t h e r 4 s e l f . mother = mother

slide-31
SLIDE 31

Classes 1/2

Creation by keyword class and parent classes Constructor init takes self like every other method Attribute access as self.attribute, accessible from everywhere private attributes are created by prepending

  • r

property is used to implement accessors 1 class Animal ( o b j e c t ) : 2 def i n i t ( s e l f , father , mother ) : 3 s e l f . f a t h e r = f a t h e r 4 s e l f . mother = mother 5 6 # read

  • nly

7 mother = property (lambda s : s . mother ) 8 9 # changes are p o s s i b l e 10 f a t h e r = property (lambda s : s . f a t h e r , 11 s e t f a t h e r )

slide-32
SLIDE 32

Classes 2/2

Operator overloading using special names: a == b eq (self, b) a + b add (self, b) b + a radd (self, a) (if a + b not implemented) a in b contains (self, b) a is b not overloadable; checks for identity Destructor del Iterable objects define a iter function String representations are set by str for string conversion and repr for the “look” of an object

slide-33
SLIDE 33

Variables / Name resolution

Names are bound to objects inside blocks by assignment Blocks are modules, functions and classes Modules’ bound names are called global Classes’ bound names are the class attributes (distinct from

  • bjects’ attributes)

Functions’ bound names are called local Objects’ attributes don’t form namespaces (thus self) Name resolution is static to a name

slide-34
SLIDE 34

Name binding example

Works as expected: 1 def g e n e r a t e f u n c t i o n ( ) : 2 l i s t = [ ] 3 def f u n c t i o n ( ) : 4 l i s t . append (0) 5 print l i s t 6 return f u n c t i o n Might not do what one expects: 1 def g e n e r a t e 3 f u n c t i o n s ( ) : 2 r e s u l t = [ ] 3 for x in range ( 3 ) : 4 l i s t = [ x ] 5 def f u n c t i o n ( ) : 6 l i s t . append (0) 7 print l i s t 8 r e s u l t . append ( f u n c t i o n ) 9 return r e s u l t

slide-35
SLIDE 35

Iterables

◮ Generalized list concept, generally lazy ◮ Typically used in for loops

1 for pet in ( ” cat ” , ”dog” , ”mouse” ) : 2 print pet 3 4 for i in range ( 1 0 ) : 5 print i

slide-36
SLIDE 36

Iterables

◮ Generalized list concept, generally lazy ◮ Typically used in for loops ◮ Functions can be lazy iterables by using yield

1 def primes ( ) : 2 i = 1 3 while True : 4 i = i + 1 5 for j in range (2 , i ) : 6 i f i % j == 0: 7 continue 8 y i e l d i

slide-37
SLIDE 37

Iterables

◮ Generalized list concept, generally lazy ◮ Typically used in for loops ◮ Functions can be lazy iterables by using yield ◮ Generator expressions are inline iterables

1 sumsquares = sum (( y−f ( x ))∗∗2 for x , y in \ 2 z i p ( x values , y v a l u e s ))

slide-38
SLIDE 38

Iterables

◮ Generalized list concept, generally lazy ◮ Typically used in for loops ◮ Functions can be lazy iterables by using yield ◮ Generator expressions are inline iterables ◮ List comprehensions are eager generators

1 c i t i e s = [ City ( z ) for z in z i p c o d e s i f z >50] 2 print ”There are %d such c i t i e s , 5 th i s %s ”%\ 3 ( l e n ( c i t i e s ) , c i t i e s [ 4 ] )

slide-39
SLIDE 39

Iterables

◮ Generalized list concept, generally lazy ◮ Typically used in for loops ◮ Functions can be lazy iterables by using yield ◮ Generator expressions are inline iterables ◮ List comprehensions are eager generators ◮ Arguments can be passed inside generators to create

coroutines

slide-40
SLIDE 40

Exceptions

◮ Everything not perfectly normal raises an Exception ◮ Hardly any “fail return values” ◮ Language designed with EAFP in mind ◮ Even syntax errors and sys.exit are catchable exceptions ◮ Subclass based catching ◮ Raised by raise ValueError("No negative numbers

allowed")

◮ Caught by try:

... except SomeExceptionClass: ...

◮ Can be re-raised by plain raise

slide-41
SLIDE 41

Standard Library

Builtin namespace offers just a few functions sys exit(), version, argv

  • s stat(), environ, uname()

math sin(), e, sqrt() itertools, functools iterator and function utilities datetime date and time functions email email and MIME handling urllib2 fetch URLs

  • ptparse parse command line arguments
slide-42
SLIDE 42

Extending Python

◮ Wrapping C functions

◮ ctypes ◮ C API ◮ Pyrex/Cython ◮ automatic tools (pygtk-codegen, SWIG)

◮ Extending Python

◮ direct access to language internals (“goto” module) ◮ hack the source ◮ write a PEP ◮ many modules written in plain Python

slide-43
SLIDE 43

Introduction Structure, Language & Syntax Strengths & Weaknesses

slide-44
SLIDE 44

Weaknesses

(excluding fixed)

◮ Global Interpreter Lock ◮ Execution speed ◮ No syntax for system(), regexps etc ◮ Too big for small embedded systems ◮ Parts of the standard library unorganized (os.stat,

  • s.path.exists, shellutils.copy, os.mkdir,
  • s.makedirs)

◮ No while foo = bar():

... loops

◮ No do ...

while expr loops

◮ Implicit self in methods

slide-45
SLIDE 45

Strengths

◮ Clear syntax ◮ Powerful exception handling ◮ List / generator operations ◮ Large standard library (”batteries included”) ◮ Bindings for almost everything ◮ Easy to write platform independent code ◮ Full access to language internals

slide-46
SLIDE 46

Further reading

◮ Python docs at http://docs.python.org/ ◮ Module of the Week at

http://www.doughellmann.com/PyMOTW/

◮ PEPs at http://www.python.org/dev/peps/, esp. 8

(Style) Recommended packages:

◮ python — Python interpreter and standard library ◮ python-doc — Python documentation (in contrib) ◮ ipython — More powerful interactive shell