Python Tidbits  Python created by that guy --->  Python is named after Monty Python’s Flying Circus  1991 – Python 0.9.0 Released 

Download Report

Transcript Python Tidbits  Python created by that guy --->  Python is named after Monty Python’s Flying Circus  1991 – Python 0.9.0 Released 

Python Tidbits

 Python created by that guy --->  Python is named after Monty Python’s Flying Circus  1991 – Python 0.9.0 Released  2008 – Python 2.6 / 3.0rc2

 Current – Python 2.7.1 / 3.2

 *7 th  most popular language Following: Java, C, C++, C#, PHP, Objective-C Guido van Rossum *http://www.tiobe.com/tiobe_index/inde x.htm

2011/05/24 2

Who / What Uses Python

         Google Appengine Youtube Yahoo! Groups Reddit Mercurial (Awesome VCS) Original BitTorrent client Dropbox ( http://db.tt/EKo5BAw ) Exaile (Audio player) MusicBrainz Picard 2011/05/24 3

Why Python

 High Level Language (HLL)  Rapid development  Very Readable Code  Up to 10x shorter code than Java/C/C++   Object Oriented Dynamically Typed  Numerous standard packages and modules  Numerous third-party packages  Twisted, NumPy, SciPy, PIL, M2Crypto 2011/05/24 4

Standard Python Modules

  String Modules  string  re  StringIO / cStringIO Data Compression  gzip, bz2, zipfile, tarfile   Data Structures  heapq, array, datetime, calendar Operating System  os, subprocess  Networking  socket   urllib, urllib2, httplib, ftplib, poplib, imaplib, nntplib, smtplib, telnetlib smtpd, SocketServer, BaseHTTPServer  Others  crypt   hashlib pickle / cPickle  threading 2011/05/24 5

Get on with it!

2011/05/24 6

         and as assert break class continue def del elif

Key Words

 exec          for from global if import in is lambda not      or pass print raise return    while with yield 2011/05/24 7

Types

 Immutable  Numbers   Strings Tuples  Mutable  Lists  Dictionaries   Sets Most user defined objects 2011/05/24 8

Numbers

 The usual suspects  12, 3.14, 0xFF, 0377 , (-1+2)*3/4 ** 5  abs(x), 0 0 # 1./2 -> 0.5, float(1)/2 -> 0.5

 Long (arbitrary precision), complex   2**100 -> 1267650600228229401496703205376L 1j**2 -> (-1+0j) 2011/05/24 9

Strings

           "hello"+"world" "hello"*3 "hello"[0] "hello"[-1] "helloworld" # concatenation "hellohellohello" # repetition "h" "o" # indexing # (from end) "hello"[1:4] "hello"[::2] len("hello") "hello" < "jello” "ell" "hlo" 5 True "e" in "hello" True "escapes: \n etc, \033 etc, \if etc" # slicing # more slicing # size # comparison # search 'single quotes' """triple quotes""" r"raw strings" 2011/05/24 10

More Strings

 Formatted Strings >>> "Pi: %.5f - Pi/2: %.5f" % (math.pi, math.pi/2) 'Pi: 3.14159 - Pi/2: 1.57080'  Splitting >>> "The quick brown fox jumps".split() ['The', 'quick', 'brown', 'fox', 'jumps']  Joining >>> '?'.join(['The', 'quick', 'brown', 'fox', 'jumps']) 'The?quick?brown?fox?jumps' 2011/05/24 11

Lists

 Flexible arrays, not 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"] 2011/05/24 12

More List Operations

>>> a = range(5) >>> a.append(5) >>> a.pop() # [0,1,2,3,4] # [0,1,2,3,4,5] # [0,1,2,3,4] 5 >>> a.insert(0, 42) >>> a.pop(0) # [42,0,1,2,3,4] # [0,1,2,3,4] 42 >>> a.reverse() >>> a.sort() # [4,3,2,1,0] # [0,1,2,3,4] 2011/05/24 13

Dictionaries

 Hash tables, "associative arrays"  d = {"duck": "eend", "water": "water"}  Lookup:  d["duck"] -> "eend"  d["back"] # raises KeyError exception  Insert, delete, overwrite:   d["back"] = "rug" # {"duck": "eend", "water": "water", "back": "rug " } del d["water"] # {"duck": "eend", "back": "rug"}  d["duck"] = "duik" # {"duck": "duik", "back": "rug"} 2011/05/24 14

More Dictionary Operations

 Keys, values, items:  d.keys() -> ["duck", "back"]   d.values() -> ["duik", "rug"] d.items() -> [("duck","duik"), ("back","rug")]  Presence check:  d.has_key("duck") -> True   d.has_key("spam") -> False "duck" in d -> True; "spam" in d -> False  Values of any type; keys almost any  {"name":"Bryce", "age":22, ("hello","world"):1, 42:"yes", "flag": ["red","white","blue"]} 2011/05/24 15

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 2011/05/24 16

Tuples

 key = (lastname, firstname)  point = x, y, z # parentheses optional  x, y, z = point # unpack  lastname = key[0]  singleton = (1,)  empty = () # trailing comma!!!

# parentheses!

 tuples vs. lists; tuples immutable 2011/05/24 17

Variables

 No need to declare  Need to assign (initialize)  use of uninitialized variable raises exception  Dynamically typed if friendly: greeting = "hello world" else: greeting = 12**2 print greeting  Everything is a "variable":  Even functions, classes, modules 2011/05/24 18

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] 2011/05/24 19

Control Structure

if condition:

statements

[elif condition: statements] ...

[else: statements] while condition:

statements

[else: statements] for var in sequence:

statements

[else: statements] break continue 2011/05/24 20

Grouping Indentation C

int i; for (i = 0; i < 20; i++) { if (i%3 == 0) { printf("%d\n", i); if (i%5 == 0) { printf("Bingo!\n" ); } } printf("---\n"); } 0 Bingo!

-- -- -- 3 -- -- -- 6 -- -- -- 9 -- -- -- 12 -- -- -- 15 Bingo!

-- -- -- 18 -- ---

Python

for i in range(20): if i%3 == 0: print i if i%5 == 0: print "Bingo!" print "---" 2011/05/24 21

Functions, Procedures

def name(arg1, arg2

=some_val

, ..., *v, **kw ): """documentation""" # optional doc string

statements

return return expression # from procedure # implied None # from function 2011/05/24 22

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 2011/05/24 23

Classes

class name(object): "documentation"

statements

-or class name(base1, base2, ...):

...

Most, statements are method definitions: def name(self, arg1, arg2, ...):

...

May also be class variable assignments 2011/05/24 24

Example Class

class Stack: "A well-known data structure…" def __init__(self): self.items = [] # constructor 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 is_empty(self): return len(self.items) == 0 # Boolean result 2011/05/24 25

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.is_empty() x.push(1) x.is_empty() x.push("hello") x.pop() # -> True # [1] # -> False # [1, "hello"] # -> "hello" # [1]  To inspect instance variables, use dot notation: x.items

# -> [1] 2011/05/24 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 <= n < size return self.items[size-1-n] # test precondition 2011/05/24 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) < self.limit

FancyStack.push(self, x) # "super" method call 2011/05/24 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 2011/05/24 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 2011/05/24 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 else: # Only executed if no exceptions are caught pass bar(0) 2011/05/24 31

Try-finally: Cleanup

f = open(file) try: process_file(f) finally: f.close() # always executed print "OK" # executed on success only or with open(file) as f: process_file(f) 2011/05/24 32

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() 2011/05/24 33

A Program in C

1. #include 2. #include 3. int main() { 4. srand(time()); 5. int i, j, random_odd[10]; 6. // Generate random odd integers 7. for (i = j = 0; i < 10; i++) { 8. random_odd[j] = rand() % 10000; 9. if (random_odd[j] % 2) 10. j += 1; 11. } 12. for (i = 0; i < j; i++) 13. printf("%d\n", random_odd[i]); 14. 19. } // Calculate the product 15. unsigned long product; 16. for (i = 0; i < j; i++) 17. product *= random_odd[i]; 18. printf(”\n%lu\n", product); 2011/05/24 34

And in Python

1. #!/usr/bin/env python 2. import random 3.

4. # Generate random odd integers 5. # Using a list comprehension 6. random_odd = [x for x in random.sample(range(10000), 10) if x % 2] 7. for num in random_odd: 8. print num 9.

10. # Calculate the product 11. print '\n', reduce(lambda x, y: x*y, random_odd) 2011/05/24 35

References

 Python Tutorial:  http://docs.python.org/tutorial/  Python Documentation:  http://docs.python.org/library/index.html

 Many slides from:  http://www.python.org/doc/essays/ppt/lwnyc200 2/intro22.ppt

2011/05/24 36

Questions?

2011/05/24 37