Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry...

83
Python ESA 2011/2012 Adam Belloum [email protected] Material Prepared by Eelco Schatborn

Transcript of Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry...

Page 1: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Python  

ESA  2011/2012  Adam  Belloum  

[email protected]      

Material  Prepared  by  Eelco  Schatborn    

Page 2: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

ES:  Python  

•  Today:  1.  Python  introducCon  2.  Basic  Python:  types,  variables,  statements,  FuncCons  3.  Regular  expression  4.  File  and  I/O  5.  Modules  6.  Packages  7.  Object  Oriented  Perl  8.  DocumentaCon  

Page 3: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

IntroducCon  

•  WriUen  by  Guido  van  Rossum  •  Started  work  in  1990  •  First  release  in  1991  •  Minor  number  release  every  6  months  •  Named  aZer  Monty  Python  

       “Perl  is  executable  line  noise.  Python  is  executable  pseudo-­‐code.”  

Page 4: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

What  is  Python  

•  a  general-­‐purpose  high-­‐level  programming  language  whose  design  philosophy  emphasizes  code  readability.    

•  Python  aims  to  combine  "remarkable  power  with  very  clear  syntax”,  and  its  standard  library  is  large  and  comprehensive.    

•  Its  use  of  indentaCon  for  block  delimiters  is  unusual  among  popular  programming  languages.  

hUp://en.wikipedia.org/wiki/Python_%28programming_language%29  

Page 5: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Perl  vs.  Python  

•  Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998

•  I would actively encourage my competition

to use Perl. Sean True, 30 Mar 1999

•  if you look at from 10 KM above, perl, python, and ruby are the same …  guido van rossum , pycon-2012  

Why  I  Love  Python                        ©2001    www.BruceEckel.com  

Page 6: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Last  news  about  Python    from  Guido  van  Rossum  

•  Keynote:  Guido  Van  Rossum  given  at    pycon-­‐2012  (Same  talk  was  given  at  the  UvA  last  July)  –  Trolls:  a  quesCon  that  isn’t  meant  as  a  quesCon,  but  to  heckle  •  “Python  Sucks.  Ruby  Rules”  •  “When  will  you  admit  Python  3  is  a  mistake?”  •  “Since  PyPy  is  so  much  faster  than  CPython,  why  not  abandon  CPython”  

•  Etc.  

Notes:  hUps://andrew-­‐schoen-­‐pycon-­‐2012-­‐notes.readthedocs.org/en/latest/sunday/keynote.html    

Video:  hUp://ontwik.com/python/pycon-­‐2012-­‐keynote-­‐guido-­‐van-­‐rossum/    

Page 7: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

10  Reasons  to  Learn  the  Python  Programming  Language  

1.  Reduced  CluUer  2.  It’s  not  backward-­‐compa5ble  in  exchange  for  pain  3.  It  doesn’t  value  performance  over  your  producCvity  4.  It  doesn’t  treat  you  like  stupid  5.  I  don’t  wait  forever  for  a  full  implementaCon  of  the  

language  6.  It  doesn’t  make  assumpCons  about  how  we  discover  

errors  7.  MarkeCng  people  are  not  involved  8.  You  don’t  have  to  type  so  much  9.  your  guesses  are    usually  right  10. Python  lets  you  focus  on  concepts  

Why  I  Love  Python                        ©2001    www.BruceEckel.com  

Page 8: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean
Page 9: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

DocumentaCon  :  Pydoc  

•  Commandline     $ pydoc sys!!

•  Web  browser:    –  pydoc  start  an  HTTP  server  on  the  local  machine  that  will  serve  documentaCon  to  visiCng  Web  browsers.    $ pydoc -p 1234 # start a HTTP server on port 1234!$ pydoc -g # start the server and ! # additionally bring up a small!!

   

Page 10: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Simple  Python  

A  simple  program  to  start  with:        #!/usr/bin/python principal = 1000 # initial amount rate = 0.05 # interest rate numyears = 5 # number of years year = 1 while year <= numyears: principal = principal*(1+rate) print year, principal year += 1  

Page 11: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

The  Python  Interpreter  •  Normal  method  for  scripCng  using    

#!/usr/bin/python

•  python  is  also  an  interacCve  interpreter  you  can  interpret  single  lines  of  code  good  for  simple  checking  and  debugging  

$ python mypythonprogram.py!

$ python![GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin!

Type "help", "copyright", "credits" or "license" for more information.!

>>> !

Page 12: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

ES:  Python  

•  Today:  1.  Python  introducCon  2.  Basic  Python:  types,  variables,  statements,  FuncCons  3.  Regular  expression  4.  File  and  I/O  5.  Modules    6.  Packages  7.  Object  Oriented  Perl  8.  DocumentaCon  

Page 13: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Variables  

•  Python  is  a  dynamically  typed  language:  names  can  represent  values  of  different  types  during  the  execuCon  of  the  program.  

•  Names  or  idenCfiers    – must  begin  with  a  non-­‐numeric  character  or  underscore    –  but  may  contain  both  numeric  and  non-­‐numeric  characters  

Troll  about  dynamic  type  “I  don’t  want  my  app  to  fail  witn  an  A9ributeError  a;er  running  for  4  hours”  

Page 14: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Dynamic  types  (Weak  typing)  

•  “You  write  what  you  want  to  do,  let  Python  worry  about  how”  

•  weakly  typed  programming  languages  are  those  that  support  implicit  type  conversion  

•  Argument  for    –   dynamic  typing  is  that  it  requires  less  effort  on  the  part  of  the  programmer,  because  the  interpreter  implicitly  performs  certain  conversions  

•  Argument  against  –   dynamic  typing:  “errors  won’t  be  found”  

Page 15: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Variables:  Numbers  (1)  simple  numbers  the  same  as  with  perl:  •  decimal:  12, -17, 255, … •  octal,  start  with  0: 015, -023, 0777, … •  hexadecimal,  start  with  0x: 0xc, -0x11, 0xff,…

floaCng  point  numbers:  •  ”one  and  a  quarter":  1.25  But  also  imaginary  numbers:  •  wriUen  as  'numberj',    for  example:  1.23j

Page 16: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Variables:  Numbers  (2)  

•  Complex  numbers,  using  imaginary  numbers:  –  wriUen  as:    num1 + num2j,    –  or  can  be  created  with:    complex(real, imag)  funcCon.  

         (1.0j * 1J) è (-1+0j)

Page 17: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Variables:  Strings  (1)  

•  To  create  string  literals,  enclose  them  in  single,  double  or  triple  quotes.  

Examples:  'Hello World' "Python is groovy"

"""Sino si Pepito Biglangliko?"""

•  The  same  type  of  quote  used  to  start  the  string  must  be  used  to  terminate  it.  

Page 18: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Variables:  String  (2)  

•  Escape  sequences  represent  special  characters:  \n, \t, . . .

•  Both  in  double  quoted  (")  and  single  quoted  (')  strings  

•  For  verba5m  strings  use  raw  strings  using  r'.  .  .  '  >>> print "Hi there! \n \t It's me.\n" Hi there!

It's me.

>>> print r'And me \n \t as well!' And me \n \t as well!

Page 19: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Variables:  Strings  (3)  •  Triple-­‐quoted  strings  using  either  """or  ‘’’  capture  all  the  

text  that  appears  before  the  terminaCng  triple  quote.  

–  Single  and  double  quoted  strings  must  be  on  one  logical  line.  –  Triple-­‐quoted  strings  are  useful  when  contents  of  the  string  span  

mul5ple  lines  of  text.    

–  For  example:  >>> print """ … Usage: thingy [OPTIONS] … -h Display this usage message … -H hostname Hostname to connect to …"""

Page 20: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

•  String  literals  can  span  mul5ple  lines  using  a  closing  backslash  ('\')  

•  The  backslash  is  for  syntax  purposes  only,  it  is  not  included  in  the  output  

>>> print "Hi \ … there! \n\ … \t It's me.\n”  

prints:  Hi there! It's me.

Variables:  Strings  (4)  

Page 21: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Variables:  Strings  (5)  •  Strings  are  indexed  like  lists,  starCng  at  0  •  You  can  use  them  using  the  index  operator  '[i]'  

>>> a = "Hello World" >>> b = a[4] >>> b o

•  Substrings  can  be  used  by  slicing:  `[i:j]’  >>> a[0:6] "Hello " >>> d = a[7:] "World" >>> e = a[3:8] "lo Wo"

Page 22: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Variables:  Strings  (6)  

 Other  data  types  can  be  converted  into  a  string  using  either  str()  or  repr()  funcCons  or  backquotes  (`),  which  are  a  shortcut  notaCon  for  repr().  

Examples

>>> x = 5.2 >>> s = "The value of x is " + str(x) >>> s The value of x is 5.2

>>> s = "The value of y is " + repr(y) >>> s = "The value of y is " + `y`

Page 23: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Operators:  numbers    

•  The  following  operators  for  numbers  apply:            +, -, *, /, //, % …

•  C-­‐style  shiZing  &  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  \\          >>> width = 20 >>> height = 5*9

>>> width * height 900

Page 24: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Operators:  Strings  

•  Strings  can  be  concatenated  using  a  '+'  •  But  also  by  wriCng  them  adjacent  to  each  other:  

Examples    >>> print "Hello" + 'Python' HelloPython >>> print "Python " "says" ' Hello!'

Python says Hello!

Page 25: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Reference  SemanCcs  

•  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]  

a  

1   2   3  

b  

a  

1   2   3  

b  

4  

a  =  [1,  2,  3]  

a.append(4)  

b  =  a  

a   1   2   3  

Slide  25        ©2001,  2002  Guido  van  Rossum  

Page 26: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

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  26        ©2001,  2002  Guido  van  Rossum  

Page 27: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Play  around  1  

•  Write  a  short  python  prog,  which  when  you  enter  our  name  it  prints  :  Hi  !  <your  name>  .  

•  Hint:  use  raw_input()  to  get  the  input  

>>> name = raw_input('What is your name?\n')

>>> What is your name? OS3

>>> print 'Hi, ' + name + '.' Hi, OS3.

Page 28: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Variables:  Lists  (1)  •  lists  and  tuples  are  sequences  of  arbitrary  objects  You  

can  create  a  list  as  follows:  >>> names = [ "Eric", "Trixie", "Coley" ]

     They  too  are  indexed:  >>> a = names[2] a is now "Coley" >>> names[0] = ”Jan" >>> names[0] Jan

•  append  a  new  member  to  the  end  of  a  list  using  append()  >>> names.append("Khamir") >>> names [ "Eric", "Trixie", "Coley", "Khamir" ]

Page 29: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Variables:  Lists  (2)  •  You  can  extract  or  reassign  a  por5on  of  a  list  by  using  the  slicing  

operator.    Examples    

>>> names = ["pusakat","Trixie","Coley","Khamir"] >>>names[0:2]

["pusakat", "Trixie”] >>> names[2:]

["Coley", "Khamir" ]

     •  Use  the  plus  ('+')  operator  to  concatenate  lists.    

>>> a = [1,2,3] + [4,5] >>> a [1,2,3,4,5]

Page 30: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Variables:  Lists  (3)  •  Lists  can  contain  any  kind  of  Python  object  including  

other  lists.  

Example:  >>> a = [1,"Dave”,3,["Mark”,9,[100, 101]],10]

 

•  Nested  lists  are  accessed  as  follows:  >>> a[1] "Dave" >>> a[3] ['Mark', 9, [100, 101]] >>> a[3][2][1] 101

 

Page 31: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Variables:  Tuples  

•  Tuples  are  a  lot  like  lists  –  Tuples  support  most  of  the  same  funcCons  as  a  list  –  They  are  however  immutable  aZer  creaCon  –  Used  to  return  mul5ple  values  from  a  funcCon  

•  You  can  create  tuples  by  enclosing  a  group  of  values  in  parentheses  ('(.  .  .  )')  or  with  a  comma-­‐separated  list.  

>>> a = (1,4,5,-9,10,'hello!’) >>> b = (7,) # this is a singleton >>> c = a, b >>> c ((1,4,5,-9,10,'hello!’),(7,))

Page 32: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Variables:  DicConaries  (1)  •  A  dic5onary  is  an  associa5ve  array  or  hash  table  that  

contains  objects  indexed  by  keys.  •  Only  immutable  objects  can  be  used  as  a  key,  like  

strings,  numbers,  tuples,  etcetera.  •  You  create  a  dicConary  by  enclosing  values  in  curly  

braces  ('{.  .  .  }'):  >>>>    a = { … "username" : "xenos", … "home" : "/home/xenos", … "uid" :500 … } >>> a ["uid"] 500

Page 33: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Variables:  DicConaries  (2)  •  Access  any  value  using  it's  key:  

 >>>  a["username"] "xenos" >>> a["home"] "/home/xenos”

•  To  insert  or  modify  objects,  you  assign  a  value  to  a  key-­‐indexed  name.  

 a["username"] = "trixie" a["home"] = "/home/trixie" a["shell"] = "/usr/bin/tcsh”

Page 34: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Variables:  DicConaries  (3)  

DicConary  membership  is  tested  with  the  has_key()  method:  if a.has_key("username"): username = a["username"]

else: username = "unknown user"

This  can  also  be  performed  more  compactly  this  way.  username = a.get("username", "unknown user")

Page 35: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

 Variables:  DicConaries  (4)  

•  To  obtain  a  list  of  dicConary  keys,  use  the  keys()  method.  

 k = a.keys() k = ["username", "home", "uid", "shell" ]

•  Use  the  del  statement  to  remove  an  element  of  a  dicConary.  

 del a["username"]

Page 36: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

ES:  Python  

•  Today:  1.   Python  introducCon  2.  Basic  Python:  types,  variables,  statements,  funcCons  3.  Regular  expression  4.  File  and  I/O  5.  Modules    6.  Packages  7.  Object  Oriented  Perl  8.  DocumentaCon  

Page 37: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Flow  control  

•  A  block  of  code  contains  a  list  of  statements.  •  Code  blocks  are  denoted  by  using  indenta5on  •  Flow  control  can  be  exerted  using  looping  or  condiConal  Statements.  

Page 38: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Looping  Statements  (1)  

•  Iterates  over  the  members  of  a  sequence,  such  as  a  string,  list  or  tuple.  

>>>for i in ( 1, 2, 3, 4, 5, 6, 7, 8, 9 ): … print "2 to the power %d is %d” % (i, 2**i)

•  Using  the  range()  funcCon  you  can  also  give  a  range:  >>> for i in range(1,10):

… print "2 to the power %d is %d” % (i, 2**i)

Page 39: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Looping  Statements  (2)  

•  The  for  statement  can  iterate  over  any  sequence  type  and  isn't  limited  to  sequences  of  integers.  >>>  a = "Hello World” # Print out the characters in a >>> for c in a:

… print c

>>> b = ["Eric", "Trixie", "Coley", "Khamir”]

# Print out the members of a list

>>> for name in b: … print name

Page 40: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Looping  Statements  (3)  

# a = [0,1,2,3,4] # b = [1,2,3,4,5,6,7]

# c = [0,3,6,9,12] # d = [8,7,6,5,4,3,2]

•  The  range(i,  j)  funcCon  constructs  a  list  of  integers  with  values  from  i  to  j  à  1.  

•  If  the  starCng  value  is  omiUed,  it's  assumed  to  be  zero.  

•  An  opConal  stride  or  step  size  can  be  given  as  a  third  •  argument.  

a = range(5)

b = range(1,8) c = range(0,14,3)

d = range(8,1,-1)-1)

Page 41: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Play  around  2  

•  Write  a  short  python  prog,  which  iterate  through  a  list  and  print  the  iteraCon  

•  Hint:  use  enumerate()  to  iterate  through  the  list  

my_list = ['john', 'pat', 'gary', 'michael']

for i, name in enumerate(my_list):

print "iteration %i is %s" % (i, name))

Page 42: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Play  Around  3  

•  Write  a  short  prog  in  python,  which  prints    amount  of  money  you  have  to  pay  for  a  given  purchase    let  say:  1  kg  (apples  à1.40  euro/kg),  3  kg  (banana    à1.20  euro/kg)  

•  Hint:  use  dicConary,     prices = {'apple': 1.40, 'banana': 1.20} my_purchase = { 'apple': 1, 'banana': 6} grocery_bill = sum( prices[fruit] * my_purchase[fruit] \ for fruit in my_purchase) Print 'I owe the grocer $%.2f' % grocery_bill :

Page 43: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

CondiConal  Statements  (1)  

The  if  statement:    if test: ... elif test: ... else:

...

•  The  usual  comparison  operators  for  tesCng:  <, >, ==, !=, <=, >=

•  They  work  on  most  Python  objects

The  while  statement:  while test:

...

Page 44: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

CondiConal  Statements  (2)  •  if  statement  example:  

if a == 5: print "It's five!" elif a == 6: print "It's six!" else: print "It's something else.”  

•  while  statement  example:  a = 0 while a < 3: a = a +1 print "Counting up to 3..."

Page 45: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Play  Around  4  •  Write  a  short  prog  in  python  which  uses  the  local  Cme  to  print  

something  (  your  acCviCes  during  the  day).  

•  Hint:  import  Cme,  Cme.localCme(),    to  get  the  hours  myCme.tm_hour()  

import time now = time.localtime() hour = now.tm_hour if hour < 8: print 'sleeping' elif hour < 9: print 'commuting' elif hour < 17: print 'working' elif hour < 18: print 'commuting' elif hour < 20: print 'eating' elif hour < 22: print 'resting' else: print 'sleeping'

Page 46: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

ES:  Python  

•  Today:  1.  Python  introducCon  2.  Basic  Python:  types,  variables,  statements,  FuncCons  3.  Regular  expression  4.  File  and  I/O  5.  Packages  6.  Object  Oriented  Perl  7.  DocumentaCon  

Page 47: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

FuncCons  (1)  

•  funcCons  can  be  defined  using  def  def fibo(n): # calculate fibonacci up to n ...  

•  arguments  can  have  default  values  through  assignment  in  the  definiCon  def fibo(n=100): # n has default value 100

...  

Page 48: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

FuncCons  (2)  

def  name(arg1,  arg2,  ...):          """documentaBon"""  #  opConal  doc  string          statements    return  expression                #  from  funcCon  

Page 49: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

FuncCon  (3)  

•  Return  values  without  a  return  value  a  funcCon  returns  None        

•  Example  def fibo(n): # return Fibonacci series up to n result = []

a, b = 0, 1

while b < n: result.append(b) # see below

a, b = b, a+b

return resultturn result

Page 50: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

FuncCon  (4)  

•  Usage  –  calling  the  example  funcCon  without  an  argument      >>> fibo() # call it [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

 –  calling  the  example  funcCon  with  an  argument     >>> fibo(50) # call it again [1, 1, 2, 3, 5, 8, 13, 21, 34]

Page 51: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Play  Around  5  

•  Write  a  short  prog  in  python  which  has  a  funcCon  with  greets  the  name  given  as  arguments  

def greet(name): print 'hello', name

greet('Jack')

>>> hello, Jack

Page 52: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

ES:  Python  

•  Today:  1.   Python  introducCon  2.  Basic  Python:  types,  variables,  statements,  funcCons  3.  Regular  expression  4.  File  and  I/O  5.  Modules    6.  Packages  7.  Object  Oriented  Perl  8.  DocumentaCon  

Page 53: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Regular  Expressions  

•  Import  the  re  package  to  use  regular  expressions  •  A  number  of  funcCons  are  available  in  re  package:  

match()

search()

split() sub()

. . .

•  For  more  informaCon  see  the  documentaCon  $  pydoc  re  

 

Page 54: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Regular  Expressions  •  If  we    want  to  write  a  prog  in  python,  which  match  a  regexp  to  

validate  a  list  of  phone  number  in  USA   import re for test_string in ['555-1212', 'ILLEGAL’]:

if re.match(r'^\d{3}-\d{4}$', test_string): print test_string,'is a valid phone number'

else: print test_string, 'rejected'    

Page 55: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Regular  Expressions  •  If  we    want  to  write  a  prog  in  python,  which  match  a  regexp  to  validate  

a  list  of  phone  number  in  USA   >>> import re >>>  m  =  re.match(r"(\w+)  (\w+)",  "Isaac  Newton,  physicist")  >>>  m.group(0)              #  The  enCre  match  'Isaac  Newton'  >>>  m.group(1)              #  The  first  parenthesized  subgroup.  'Isaac'  >>>  m.group(2)              #  The  second  parenthesized  subgroup.  'Newton'  >>>  m.group(1,  2)        #  MulCple  arguments  give  us  a  tuple.  ('Isaac’,    ‘Newton’)  

Page 56: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Play  Around  5    •  Write  a  short  prog  in  python,  which  open  all  files  in  you  current  directory  

and  prints  its  content  

•  Hint:  use  glob  module,    –  open  (filename)  to  open  a  file      –  glob.glob('*.py’)  Unix  style  pathname  extensions  –     

import glob # glob supports Unix style pathname extensions python_files = glob.glob('*.py') for fn in sorted(python_files):

print ' ------', fn for line in open(fn): print ' ' + line.rstrip()

print

Page 57: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Play  Around  6  •  Write  a  short  prog  in  python  which  sum  up  integers  in  

the  command  line    •  Hint:  important  sys  module,  try:  …  except  ValueError:    

import sys

try: total = sum(int(arg) for arg in sys.argv[1:]) print 'sum =', total

except ValueError: print 'Please supply integer arguments'

Page 58: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

ES:  Python  

•  Today:  1.   Python  introducCon  2.  Basic  Python:  types,  variables,  statements,  funcCons  3.  Regular  expression  4.  File  and  I/O  5.  Modules    6.  Packages  7.  Object  Oriented  Perl  8.  DocumentaCon  

Page 59: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Reading Files

name = open("filename") –  opens the given file for reading, and returns a file object

name.read() - file's entire contents as a string

>>> f = open("hours.txt") >>> f.read() '123 Susan 12.5 8.1 7.6 3.2\n 456 Brad 4.0 11.6 6.5 2.7 12\n 789 Jenn 8.0 8.0 8.0 8.0 7.5\n'

hUp://www.cs.washington.edu/educaCon/courses/cse143/12wi/python.shtml  

Page 60: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Line-based File Processing

name.readline() - next line from file as a string

–  Returns an empty string if there are no more lines in the file

name.readlines() - file's contents as a list of lines

>>> f = open("hours.txt") >>> f.readline() '123 Susan 12.5 8.1 7.6 3.2\n'

>>> f = open("hours.txt") >>> f.readlines() ['123 Susan 12.5 8.1 7.6 3.2\n', '456 Brad 4.0 11.6 6.5 2.7 12\n', '789 Jenn 8.0 8.0 8.0 8.0 7.5\n']

Page 61: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Writing Files name = open("filename", "w") # write name = open("filename", "a") # append

–  opens file for write (deletes any previous contents) , or –  opens file for append (new data is placed after previous data)

name.write(str) - writes the given string to the file name.close() - closes file once writing is done

>>> out = open("output.txt", "w") >>> out.write("Hello, world!\n") >>> out.write("How are you?") >>> out.close()

>>> open("output.txt").read() 'Hello, world!\nHow are you?'

hUp://www.cs.washington.edu/educaCon/courses/cse143/12wi/python.shtml  

Page 62: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Line-based Input Template

•  A file object can be the target of a for ... in loop

•  A template for reading files in Python:

for line in open("filename"): statements

>>> for line in open("hours.txt"): ... print(line.strip()) # strip() removes \n 123 Susan 12.5 8.1 7.6 3.2 456 Brad 4.0 11.6 6.5 2.7 12 789 Jenn 8.0 8.0 8.0 8.0 7.5

hUp://www.cs.washington.edu/educaCon/courses/cse143/12wi/python.shtml  

Page 63: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

ES:  Python  

•  Today:  1.   Python  introducCon  2.  Basic  Python:  types,  variables,  statements,  funcCons  3.  Regular  expression  4.  File  and  I/O  5.  Modules    6.  Packages  7.  Object  Oriented  Perl  8.  DocumentaCon  

Page 64: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Modules  (1)  

•  A  module  is  a  file  containing  Python  defini5ons  and  statements.  

•  The  file  name  is  the  module  name  with  the  sux  .py  appended.  

•  Within  a  module,  the  module's  name  (as  a  string)  is  available  as  the  value  of  the  global  variable    

__name__.  

Page 65: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Modules  (2)  

•  Example  module  fibo.py  

# Fibonacci numbers module

def fibo(n): # write Fibonacci # series up to n a, b = 0, 1

while b < n: print b a, b = b, a + b

Page 66: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Modules  (3)  •  Import  the  module  with  the  following  command:  

 >>> import fibo •  The  funcCons  are  not  included  directly  •  Using  the  module  name  you  can  access  the  funcCons:  

    >>> import fibo >>> fibo.fibo(1000) 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 >>> fibo.__name__ 'fibo'

Page 67: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Modules  (4)  

•  If  you  intend  to  use  a  funcCon  oZen  you  can  assign  it  to  a  local  name:  

 >>> fib = fibo.fibo >>> fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377

Page 68: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Modules  (5)  •  The  built-­‐in  funcCon  dir()  can  be  used  to  find  out  which  

names  a  module  defines.  It  returns  a  sorted  list  of  strings:   >>> import fibo >>> dir(fibo) ['__builtins__', '__doc__', '__file__', '__name__', '__package__', , 'fibo']

•  It  lists  all  types  of  names:  variables,  modules,  func5ons,  etc.  

•  Without  arguments,  dir()  lists  the  names  you  have  defined  currently  

Page 69: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

ES:  Python  

•  Today:  1.   Python  introducCon  2.  Basic  Python:  types,  variables,  statements,  funcCons  3.  Regular  expression  4.  File  and  I/O  5.  Modules    6.  Packages  7.  Object  Oriented  Perl  8.  DocumentaCon  

Page 70: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Packages  (1)  

•  Packages  are  a  way  of  structuring  Python's  module  •  namespace  by  using  doMed  module  names".  •  They  hide  module  names  from  other  packages  •  They  are  made  up  of  modules  in  a  parCcular  hierarchic  file  system  

•  Each  directory  name  is  apart  of  the  module  structure  

Page 71: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Packages  (2)  •  An  example  Package:  

Sound/ Top-level package __init__.py Initialization Formats/ file format conversions/ __init__.py wavread.py ... ...

•  __init__.py  files  are  required  to  make  Python  treat  the  directories  as  containing  package  

•  __init__.py can  just  be  an  empty  file,  but  it  can  also  execute  iniCalizaCon  code  for  the  package.  

Page 72: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Packages  (3)  •  Import  individual  modules  from  the  package:  

import Sound.Effects.echo –  Any  func5ons  in  a  package  must  sCll  be  referenced  by  their  fully  qualified  name   Sound.Effects.echo.echofilter( ... )

•  An  alternaCve  way  of  imporCng  the  submodule  is:  from Sound.Effects import echo –  This  also  loads  the  submodule  echo,  and  makes  it  available  without  its  package  prex  

(Sound.Effects).  

echo.echofilter( ... )

•  Import  all  modules  from  the  package:  from Sound.Effects import *

Page 73: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

ES:  Python  

•  Today:  1.   Python  introducCon  2.  Basic  Python:  types,  variables,  statements,  funcCons  3.  Regular  expression  4.  File  and  I/O  5.  Modules    6.  Packages  7.  Object  Oriented  Perl  8.  DocumentaCon  

Page 74: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Class  •  Declare  a  class  by    class  <classname>:  

–  class  defini5ons  introduce  new  a  namespace,  with  its  OWN  scope  –  all  definiCons  within  a  class  definiCon  are  in  that  new  scope  

•  Use  a  class  from  <classname>  import  *  

–  client  programs  must  import  the  classes  they  use  –  the  file  name  (lowercase),  not  class  name,  is  used  

•  classes  can  be  instan5ated  into  instance  objects  

           from myclass import *!

 x = MyClass() # It creates a new instance of the class and assigns this !! ! ! ! ! # object to the local variable x,!! ! ! ! ! # which now represents an instance object.!! ! ! ! ! !!! ! ! ! ! ! ! ! ! ! !  

Page 75: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Class  Method  (Method  Objects)  

•  The  first  argument  of  any  funcCon  within  a  class  is  an  object  reference  to  a  class  instance  

   class MyClass: i = 12345 def f(self): return 'hello world’

•  A  class  constructor  is  a  special  method  named    def __init__(self [, param1, ..., param_n]): …

Page 76: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Class  Method  (Method  Objects)  

•  Class  Methods  –  The  first  argument  is  always  the  object  itself       def <methodname>(self, parm1, param2): self.param1 = … self.param2 = … …  

•  Method  objects  are  instan5a5ons  of  func5ons  in  a  class.  

–  the  call  method  object    through  the  instance  object  x.f()

Page 77: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Class  instance  (instance  object)  •  You  can  create/delete  aMributes  from  an  instance  object  (not  

from  a  class  object)  –  create  by  assignment  –  delete  by  using  del.  

 x.counter = 1 # creates a new attribute of!! ! ! ! ! ! ! ! # the instance object x

while x.counter < 10:

x.counter *= 2 print x.counter

del x.counter # delete attribute from the !!! !! !! !! # instance object x

Page 78: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Example  of  class  class BankAccount(object):

def __init__(self, initial_balance=0): self.balance = initial_balance

def deposit(self, amount): self.balance += amount

def withdraw(self, amount): self.balance -= amount

def overdrawn(self): return self.balance < 0

my_account = BankAccount(15) my_account.withdraw(5) print my_account.balance

hUp://wiki.python.org/moin/SimplePrograms  

Page 79: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Printing Objects

•  By default, Python doesn't know how to print an object:

•  We'd like to be able to print a Point object and have its state shown as the output.

>>> p = Point(5, -2) >>> print p <Point instance at 0x00A8A850>

hUp://www.cs.washington.edu/educaCon/courses/cse143/12wi/python.shtml  

Page 80: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Printable Objects: __str__

def __str__(self): return string

–  converts an object into a string (like Java toString) –  invoked automatically when str or print is called def __str__(self): return "(" + str(self.x) + ", " + str(self.y) + ")"

>>> p = Point(5, -2) >>> print p (5, -2) >>> print "The point is " + str(p) + "!" The point is (5, -2)!

hUp://www.cs.washington.edu/educaCon/courses/cse143/12wi/python.shtml  

Page 81: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

DocumentaCon  

 •  Use  the  web,  there  are  a  lot  of  websites  on  python  •  Check  www.python.org  for  help.  •  Use  the  pydoc  tool,  python  manual  pages  etcetera.  

Material  for  these  slides  was  taken  from  hUp://www.python.org/doc  hUp://www.cs.washington.edu/educaCon/courses/cse143/12wi/python.shtml  

 

Page 82: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Assignment    •  Create  a  class  python  for  keeping  track  of  the  various  hardware  

configuraCon  and  their  relaCon  to  each  other  as  used  in  our  Lab.  Note  that  there  are  different  types  of  hardware  and  relaCons.  

•  So,  define  a  number  of  types  of  hardware  and  a  number  of  types  if  relaCons  (direct  cable  network,  etc)  and  create  a  single  class  that  can  be  instanCated  to  represent  each  and  every  one  of  them.  The  instance  objects  must  be  connected  through    relaCons  to  represent  ,  in  the  end  ,  the  OS3  Lab  in  an  abstract  sense.  So  the  objects  represent  a  tree  structure  represenCng  the  lab  as    whole  .  

•  So  as  an  example:  your  desktop  machine  has  a  keyboard  a  mouse  and  two  screens  directly  aUached  to  it.  The  desktop  computer  itself  is  connected  to  the  experimentaCon  machines  through  a  network.  Then  describe  the  experiment  machines  etc,  etc.  

Page 83: Python’Perl’vs.’Python’ • Perl is worse than Python because people wanted it worse. Larry Wall, 14 Oct 1998 • I would actively encourage my competition to use Perl. Sean

Assignment    •  The  following  funcCons  must  be  made  available  for  each  node  or  piece  of  

hardware  

•   Print  –  should  print  the  info  of    the  certain  piece  only  –  this  includes  the  hardware  descripCon  at  least.  You  could  only  also  include  it’s  

posiCon  Cn  the  lab/server  room,  its  color  etc.  •  Printall  

–  Should  print  he  informaCon  for  this    piece    and  all  its  descendant    –   this  should    traverse  the  object  downwards  only  

 Bonus              Thinks  of    way  to  create  and  a  actual  descripCon  of  the  lab  on  top  of  the  

abstract  descripCon,  so;  add  the    name  of  a  computer  and  who  sits  behind  it  etc.  this  implies  that  there  can  be  many  desktops  computer  instances  that  look  exactly  the  same  hardware  wise,  but  have  different  owners.