python.
RICE UNIVERSITY COMP 140
A N E X P E R I M E N TA L TA L K F O R A N E X P E R I M E N TA L C O U R S E AUG 26 & 27, 2008
Daniel Sandler
dsandler@rice
[Link]
1. 3.
2. 4.
1.
A young mind is corrupted.
Me, circa 2000
(very busy)
Many tasks, many languages
C++ (work) OOP, popular Scheme (fun) pretty, powerful perl (utility belt) useful
Many tasks, many languages
C++ (work) OOP, popular
painful development cycle
Scheme (fun) pretty, powerful
unreadable by others
perl (utility belt) useful
unreadable by anyone
print pack"C*",split/\D+/,`echo "16iII*o\U@{$/=$z;[(pop,pop,unpack"H*",<> )]}\EsMsKsN0[lN*1lK[d2%Sa2/d0<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<J]dsJxp"|dc`
a language
I discovered
then,
called
a language
python!
I discovered
then,
called
I am lazy.
Me, circa 2006
(lazy)
Me, circa 2008
(aww!)
(still lazy)
I am lazy.
I am too lazy to wait for the compiler I am too lazy to switch between
programming languages all the time
I am too lazy to look up documentation I am too lazy to try to decipher line noise
Stuff I need to do:
Sketch new ideas quickly Hack together analysis tools
in the field
Turn prototypes into final
research code
Build web applications for
course & departmental use
2.
Seriously, tell us about python already.
python is
an interpreted programming language object-oriented dynamically typed blah blah blah
python is
handy smart fun helpful pretty
handy
built-in libraries, everything I might need
data structures, concurrency object serialization cross-platform gui sockets/smtp/mime/http/imap/xml/rpc/etc. posix stuff, compression regexps, unicode cgi/httpd
scientific computing, other modules: databases, image processing, crypto,
smart
python is not just a scripting language pick your favorite programming paradigm
very fancy OOP not functional programming: a just bd
supported, but natural
am l
fun
every Python is an interactive workshop
the read-eval-print loop (REPL) ask a question, get an answer the only calculator youll ever need experiment with live objects
(no waiting for the compiler)
helpful
Every object, class, function, module is selfdocumenting
Carry your documentation with you
functions to use in the REPL: help(foo) dir(foo)
Essential, dont-leave-home-without-them
(Its actually a property on the object)
pretty
public class Hello { public static void main(String[] args) { [Link]("Hello, world"); } }
pretty
public class Hello { public static void main(String[] args) { [Link]("Hello, world"); } }
pretty (2)
Ever seen this?
if (x ){ x: (x) { xx==2*x 2*x 2*x; else: } } else{ ; else { while(x>0) { while x>0: while(x>0) x -=-= 2; x 2;2 } x = [Link](x); }x = [Link](4*x); [Link](x) }
The perfect date, indeed
handy: built-in libraries ftw smart: a real programming language fun: play around, develop quickly helpful: documentation is always there pretty: ugly code is hard to write
3.
The (clean) Python phrasebook.
Simple types
1, -2.5, 0xDA51D, 3+5j, 9999999999L 'spam', "King Arthur's spam", '''multiline spam'''
True, False None
Compound types
List (mutable sequence) Dictionary (mutable hash table)
Tuple (immutable sequence) ("eggs", 100, True) [1, [2, 3], None, "eggs"]
{"eggs": "The finest eggs in all Lilliput"
"spam": "Spiced ham from Camelot"}
Naming, accessing
x = 1 # creates the name x and sets its value
# to 1. Oh, hey, this is a comment.
y = ["eggs", 2, 3] z = {"a": 1, "b": 2} x+1 y[1] z["b"]
# result is 2 # result is also 2 # ...still 2
String formatting
"Hello %s (%d years old)." % (whom, age) "Hello %(name)s (%(age)d years old)." % aDict
Functions, conditionals def fib(n):
"""Recursively computes the nth Fibonacci number.""" if n == 0: return 0 elif n == 1: return 1 else: return fib(n-1) + fib(n-2)
A simple program: wc
import [Link].*; import [Link].*; public class wc { public static void main(String[] argv) throws IOException { BufferedReader input = new BufferedReader( new InputStreamReader([Link])); boolean done = false; long count = 0; while (!done) { String line = [Link](); if (line == null) { done = true; } else { boolean inword = false; for (int i = 0; i < [Link](); i++) { char ch = [Link](i); if (!inword) { if (ch != ' ') { inword = true; count += 1; } } else { if (ch == ' ') { inword = false; } } } } } [Link](count); } }
open file initialize read bail
each char new word, increment counter end word
print
wc in python (1)
import sys done = False count = 0 while not done: line = [Link]() if line == '': # EOF done = True else: inword = False for char in line: if not inword: if not [Link](): inword = True count += 1 else: if [Link](): inword = False print count
read bail
every char new word end word print
wc in python (2)
import sys done = False count = 0 while not done: line = [Link]() if line == '': # EOF done = True else: count += len([Link]()) print count
split string
length of any sequence
(default: into words)
wc in python (3)
import sys count = 0 for line in [Link]: count += len([Link]()) print count
iterate lines in a file
wc in python (4)
import sys print len([Link]().split())
read whole file into a string
the Java version
import [Link].*; import [Link].*; public class wc { public static void main(String[] argv) throws IOException { BufferedReader input = new BufferedReader( new InputStreamReader([Link])); boolean done = false; long count = 0; while (!done) { String line = [Link](); if (line == null) { done = true; } else { boolean inword = false; for (int i = 0; i < [Link](); i++) { char ch = [Link](i); if (!inword) { if (ch != ' ') { inword = true; count += 1; } } else { if (ch == ' ') { inword = false; } } } } } [Link](count); } }
4.
Ride the snake.
Beyond the interpreter
Need speed?
Implement performance-critical code in C,
wrap it in a Python interface for reuse
Missing call/cc?
Stuck in another runtime?
Stackless Python
Jython: Python syntax + JVM IronPython: Python syntax + .NET CLR
Scientific computing
Numeric python - [Link] pylab/matplotlib - [Link] [Link], pydot Next time you reach for matlab or gnuplot,
try python instead
End-user applications
GUI toolkits:
Tk wxWidgets MFC (Windows Cocoa (OS X)
BitTorrent
Industry
Indexing the known universe (Google) Exploring the known universe (NASA) Recreating the known universe (ILM) Destroying the known universe (Eve Online)
Education
Good for teaching
All the simplicity of Scheme Familiar infix math Widely used outside the academy MIT intro curriculum has gone Python And nowRices new COMP 140
A trend in CS education
Further reading
Dive Into Python
[Link]
(updated 2006)
Programming Python (OReilly) More links, plus these slides:
[Link]
1.
(my python story)
2.
(about the language)
3.
(syntax)
4.
(resources)
16 tonnes
Brought to you by
the Ministry of Silly Talks