10/10/1999© 1999 cnri, guido van rossum 1 python workshop (acm@uiuc) guido van rossum cnri...
TRANSCRIPT
![Page 1: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/1.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
1
Python Workshop(ACM@UIUC)
Guido van RossumCNRI
(Corporation for National Research Initiatives, Reston, Virginia, USA)
![Page 2: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/2.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
2
Outline
– Briefly, what is Python?– Why use Python?– Python compared to other languages– Basic Python tutorial
![Page 3: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/3.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
3
BRIEFLY,WHAT IS PYTHON?
![Page 4: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/4.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
4
What’s in a name?
• Snake logos and mascot notwithstanding, it’s named after Monty Python’s Flying Circus
• Humor-impaired can safely ignore the spam references :-)
• Nobody expects the Spanish Inquisition
![Page 5: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/5.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
5
What is Python?
• O-O HL rapid prototyping language• Not just a scripting language• Not just another Perl• Extensible (add new modules)
• C/C++/Fortran/whatever• Java (through JPython)
• Embeddable in applications
![Page 6: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/6.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
6
Touchy-feely properties
• Free (open source)• copyrighted but use not restricted
• Mature (9 years old)• Supportive user community
• & more books in the pipeline!
• Elegant design, easy to learn• reads like “pseudo-code”• Suitable as first language
![Page 7: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/7.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
7
High-level properties
• Extremely portable• Unix, Windows, Mac, BeOS, Win/CE, DOS,
OS/2, Amiga, VMS, Cray, …
• Compiled to interpreted byte code• compilation is implicit and automatic
• Automatic memory management• reference counting
• “Safe”: no core dumps
![Page 8: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/8.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
8
Interfaces to...
• COM, DCOM, ODBC• Commercial databases• Java (JPython)• Many GUI libraries
• platform-independent– Tk, wxWindows, GTK
• platform-specific– MFC, MacOS, X11/Motif
![Page 9: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/9.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
9
Language properties
• Everything is an object• Modules, classes, functions• Exception handling• Dynamic typing, polymorphism• Static scoping• Operator overloading• Indentation for block structure
![Page 10: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/10.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
10
High-level data types
• Numbers: int, long, float, complex• Strings: immutable• Lists and dictionaries: containers• Other types for e.g. binary data,
regular expressions, introspection• Extension modules can define new
“built-in” data types
![Page 11: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/11.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
11
WHY USE PYTHON?
![Page 12: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/12.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
12
Productivity!
• Reduced development time• code is 2-10x shorter than C, C++, Java
• Improved program maintenance• code is extremely readable
• Less training• language is very easy to learn
![Page 13: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/13.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
13
What is it used for?
– rapid prototyping– web scripting– throw-away, ad hoc programming– steering scientific applications– extension language– XML processing– database applications– GUI applications
![Page 14: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/14.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
14
Who is using it?
– LLNL, Fermilab (steering)– Alice group at CMU (3D graphics)– ObjectDomain (extend UML tool)– Infoseek (ext. language, scripting)– Industrial Light & Magic (everything)– Yahoo! (CGI in Yahoo!mail)– Digital Creations (Zope)– RedHat (Linux installation tools)
![Page 15: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/15.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
15
Exciting Applications
• Zope - supercharged websites• Mailman - GNU mailing list manager• JPython - Java integration• Python on Windows (COM, ASP etc.)• XML processing with Python• OpenClassroom• Star Wars!
![Page 16: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/16.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
16
Typical Success Stories
• Prototype in Python• first to market• acquisition• rewrite in C++ or Java• e-shop; 411
• steering• symbiosis of Python and C++ or Java• LLNL; ILM; Alice
![Page 17: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/17.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
17
How Far We Have Come
1995: "Python? What's that?"
![Page 18: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/18.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
18
How Far We Have Come
1995: "Python? What's that?"
1997: "But nobody else uses Python!"
![Page 19: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/19.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
19
How Far We Have Come
1995: "Python? What's that?"
1997: "But nobody else uses Python!"
1999: "Where can I hire Python programmers?"
![Page 20: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/20.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
20
How Far We Have Come
1995: "Python? What's that?"
1997: "But nobody else uses Python!"
1999: "Where can I hire Python programmers?"
Next: "Nobody expects the Spanish Inquisition!"
![Page 21: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/21.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
21
PYTHONCOMPARED TO
OTHER LANGUAGES
![Page 22: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/22.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
22
Python vs. Perl
– Easier to learn• important for occasional users
– More readable code• improved code maintenance
– Fewer “magical” side effects– More “safety” guarantees– Better Java integration– Less Unix bias
![Page 23: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/23.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
23
Python vs. Tcl
– Real datatypes, object-orientation– More differentiated syntax– Much faster (even than Tcl 8.x)– Less need for C extensions– C extensions don’t redefine syntax
• hence fewer extension conflicts
– Better Java integration– Python uses Tk as de-facto GUI std
![Page 24: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/24.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
24
Python vs. Java
– Code 5-10 times more concise– Dynamic typing– Much quicker development
• no compilation phase• less typing
– Yes, it runs slower• but development is so much faster!
• Use Python with Java: JPython!
![Page 25: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/25.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
25
JPython
– Seamless integration with Java– Separate implementation
• “classic Python” called CPython here
– Implements the same language– Different set of standard modules– differences in “gray areas”
• e.g. some different introspection calls• different command line options, etc.
![Page 26: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/26.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
26
Java Integration
– Interactive– Compiles direct to Java bytecode– Import Java classes directly– Subclass Java classes
• pass instances back to Java
– Java beans integration– Can compile into Java class files
• run as applet in browsers
![Page 27: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/27.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
27
BASICPYTHON
TUTORIAL
![Page 28: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/28.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
28
Tutorial Outline
• shell (introduces numbers, strings, variables)• lists (arrays), dictionaries (hashes), tuples• variable semantics• control structures, functions• classes & methods• standard library:
– files: open(), readline(), read(), readlines(), write(), close(), flush(), seek(), tell(), open() again
– os, os.path, sys, string, UserDict, StringIO, getopt
![Page 29: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/29.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
29
Interactive “Shell”
• Great for learning the language• Great for experimenting with the library• Great for testing your own modules
• Type statements or expressions at prompt:>>> print "Hello, world"Hello, world>>> x = 12**2>>> x/272>>> # this is a comment
![Page 30: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/30.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
30
Numbers
• The usual notations and operators• 12, 3.14, 0xFF, 0377, (-1+2)*3/4**5, abs(x), 0<x<=5
• C-style shifting & masking• 1<<16, x&0xff, x|1, ~x, x^y
• Integer division truncates :-(• 1/2 -> 0 # float(1)/2 -> 0.5
• Long (arbitrary precision), complex• 2L**100 -> 1267650600228229401496703205376L• 1j**2 -> (-1+0j)
![Page 31: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/31.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
31
Strings
• "hello"+"world" "helloworld" # concatenation
• "hello"*3 "hellohellohello" # repetition• "hello"[0] "h" # indexing• "hello"[-1] "o" # (from end)• "hello"[1:4] "ell" # slicing• len("hello") 5 # size• "hello" < "jello" 1 # comparison• "e" in "hello" 1 # search• "escapes: \n etc, \033 etc, \xff etc"• 'single quotes' '''triple quotes''' r"raw strings"
![Page 32: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/32.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
32
Lists
• a = [99, "bottles of beer", ["on", "the", "wall"]]
• Flexible arrays, not Lisp-like linked lists• 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"]
![Page 33: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/33.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
33
More list operations
>>> a = range(5) # [0,1,2,3,4]>>> a.append(5) # [0,1,2,3,4,5]>>> a.pop() # [0,1,2,3,4]5>>> a.insert(0, 5.5) # [5.5,0,1,2,3,4]>>> a.pop(0) # [0,1,2,3,4]5.5>>> a.reverse() # [4,3,2,1,0]>>> a.sort() # [0,1,2,3,4]
![Page 34: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/34.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
34
Dictionaries
• Hash tables, "associative arrays"• d = {"duck": "eend", "water": "water"}
• Lookup:• d["duck"] -> "eend"• d["back"] # raises KeyError exception
• Delete, insert, overwrite :• del d["water"] # {"duck": "eend", "back": "rug"}• d["back"] = "rug" # {"duck": "eend", "back": "rug"}• d["duck"] = "duik" # {"duck": "duik", "back": "rug"}
![Page 35: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/35.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
35
More dictionary ops
• Keys, values, items:• d.keys() -> ["duck", "back"]• d.values() -> ["duik", "rug"]• d.items() -> [("duck","duik"), ("back","rug")]
• Presence check:• d.has_key("duck") -> 1; d.has_key("spam") -> 0
• Values of any type; keys almost any• {"name":"Guido", "age":43, ("hello","world"):1,
42:"yes", "flag": ["red","white","blue"]}
![Page 36: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/36.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
36
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
![Page 37: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/37.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
37
Tuples
• key = (lastname, firstname)• point = x, y, z # paren’s optional• x, y, z = point• lastname = key[0]• singleton = (1,) # trailing comma!• empty = () # parentheses!• tuples vs. lists; tuples immutable
![Page 38: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/38.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
38
Variables
• No need to declare• Need to assign (initialize)
• use of uninitialized variable raises exception
• Not typedif friendly: greeting = "hello world"else: greeting = 12**2print greeting
• Everything is a variable:• functions, modules, classes
![Page 39: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/39.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
39
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]
![Page 40: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/40.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
40
a
1 2 3
b
a
1 2 3
b
4
a = [1, 2, 3]
a.append(4)
b = a
a 1 2 3
Changing a shared list
![Page 41: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/41.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
41
a
1
b
a
1b
a = 1
a = a+1
b = a
a 1
2
Changing an integer
old reference deletedby assignment (a=...)
new int object createdby add operator (1+1)
![Page 42: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/42.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
42
Control structures
if condition: statements[elif condition: statements] ...[else: statements]
while condition: statements
for var in sequence: statements
breakcontinue
![Page 43: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/43.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
43
Grouping indentation
• Python:
for i in range(20): if i%3 == 0: print i if i%5 == 0: print "Bingo!" print "---"
• C:
for (i = 0; i < 20; i++){ if (i%3 == 0) { printf("%d\n", i); if (i%5 == 0) { printf("Bingo!\n"); } } printf("---\n");}
0Bingo!---------3---------6---------9---------12---------15Bingo!---------18------
![Page 44: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/44.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
44
Functions, procedures
def name(arg1, arg2, ...): "documentation" # optional statements
return # from procedurereturn expression # from function
![Page 45: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/45.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
45
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
![Page 46: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/46.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
46
Classes
class name: "documentation" statements-or-class name(baseclass1, baseclass2, ...): ...Typically, statements contains method definitions: def name(self, arg1, arg2, ...): ...May also contain class variable assignments
![Page 47: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/47.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
47
Example class
class Stack: "A well-known data structure…"
def __init__(self): # constructor self.items = []
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 empty(self): return len(self.items) == 0 # Boolean result
![Page 48: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/48.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
48
Using classes
• To create an instance, simply call the class object:x = Stack()
• To use methods of the instance, call using dot notation:x.empty() # -> 1x.push(1) # [1]x.empty() # -> 0x.push("hello") # [1, "hello"]x.pop() # -> "hello" # [1]
• To inspect instance variables, use dot notation:x.items # -> [1]
![Page 49: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/49.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
49
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 # test precondition return self.items[size-1-n]
![Page 50: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/50.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
50
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
![Page 51: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/51.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
51
Class & instance variables
class Connection: verbose = 0 # class variable def __init__(self, host): self.host = host # instance variable def debug(self, v): self.verbose = v # make instance variable! def connect(self): if self.verbose: # class or instance
variable? print "connecting to", self.host
![Page 52: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/52.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
52
Instance variable rules
• On use via instance (self.x), search order:– (1) instance, (2) class, (3) base classes– this also works for method lookup
• On assigment via instance (self.x = ...):– always makes an instance variable
• Class variables "default" for instance variables• But...!
– mutable class variable: one copy shared by all– mutable instance variable: each instance its own
![Page 53: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/53.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
53
Modules
• Collection of stuff in foo.py file– functions, classes, variables
• Importing modules:– import string; print string.join(L)– from string import join; print join(L)
• Rename after import:– import string; s = string; del string
![Page 54: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/54.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
54
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()
![Page 55: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/55.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
55
Catching Exceptions
try: print 1/xexcept ZeroDivisionError, message: print "Can’t divide by zero:" print message
![Page 56: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/56.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
56
Try-Finally: Cleanup
f = open(file)try: process_file(f)finally: f.close() # always executedprint "OK" # executed on success only
![Page 57: 10/10/1999© 1999 CNRI, Guido van Rossum 1 Python Workshop (ACM@UIUC) Guido van Rossum CNRI (Corporation for National Research Initiatives, Reston, Virginia,](https://reader036.vdocuments.mx/reader036/viewer/2022070305/551507bf550346a87d8b469e/html5/thumbnails/57.jpg)
10/10/1999 © 1999 CNRI, Guido van Rossum
57
Raising Exceptions
• raise IndexError• raise IndexError("k out of range")• raise IndexError, "k out of range”• try:
somethingexcept: # catch everything print "Oops" raise # reraise