Python Tidbits Python created by that guy ---> Python is named after Monty Python’s Flying Circus 1991 – Python 0.9.0 Released
Download ReportTranscript 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
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
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