Categorical Variables, Relative Risk, Odds Ratios STA 220 – Lecture #8 1.
python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python...
Transcript of python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python...
![Page 1: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/1.jpg)
CS 11 python track: lecture 2• Today:
• Odds and ends
• Introduction to object-oriented programming
• Exception handling
![Page 2: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/2.jpg)
Odds and ends• List slice notation
• Multiline strings
• Docstrings
![Page 3: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/3.jpg)
List slices (1)
a = [1, 2, 3, 4, 5]
print a[0] # 1
print a[4] # 5
print a[5] # error!
a[0] = 42
![Page 4: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/4.jpg)
List slices (2)a = [1, 2, 3, 4, 5]
a[1:3] # [2, 3] (new list)
a[:] # copy of a
a[-1] # last element of a
a[:-1] # all but last
a[1:] # all but first
![Page 5: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/5.jpg)
List slices (3)
a = [1, 2, 3, 4, 5]
a[1:3] # [2, 3] (new list)
a[1:3] = [20, 30]
print a
[1, 20, 30, 4, 5]
![Page 6: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/6.jpg)
List slices (4)
a = [1, 2, 3, 4, 5]
a[1:3] = [20, 30, 40]
print a
[1, 20, 30, 40, 4, 5]
![Page 7: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/7.jpg)
Multiline stringss = "this is a string"
s2 = 'this is too'
s3 = "so 'is' this"
sl = """this is a
multiline string."""
sl2 = '''this is also a
multiline string'''
![Page 8: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/8.jpg)
Docstrings (1)• Multiline strings most useful for
documentation strings aka "docstrings":def foo(x):
"""Comment stating the purpose of
the function 'foo'. """
# code...
• Can retrieve as foo.__doc__
![Page 9: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/9.jpg)
Docstrings (2)• Use docstrings:
• in functions/methods, to explain
• what function does
• what arguments mean
• what return value represents
• in classes, to describe purpose of class
• at beginning of module
• Don’t use comments where docstrings are preferred
![Page 10: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/10.jpg)
Introduction to OOP
• OOP = Object-Oriented Programming
• OOP is very simple in python• but also powerful
• What is an object?• data structure, and
• functions (methods) that operate on it
![Page 11: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/11.jpg)
OOP terminology• class -- a template for building objects
• instance -- an object created from the template (an instance of the class)
• method -- a function that is part of the object and acts on instances directly
• constructor -- special "method" that creates new instances of a particular class
![Page 12: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/12.jpg)
Defining a class
class Thingy:
"""This class stores an arbitrary object."""
def __init__(self, value):
"""Initialize a Thingy."""
self.value = value
def showme(self):
"""Print this object to stdout."""
print "value = %s" % self.value
constructor
method
![Page 13: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/13.jpg)
Using a class (1)t = Thingy(10) # calls __init__ method
t.showme() # prints "value = 10"
• t is an instance of class Thingy
• showme is a method of class Thingy
• __init__ is the constructor method of class Thingy
• when a Thingy is created, the __init__ method is called
• Methods starting and ending with __ are "special" methods
![Page 14: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/14.jpg)
Using a class (2)
print t.value # prints "10"
• value is a field of class Thingy
t.value = 20 # change the field value
print t.value # prints "20"
![Page 15: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/15.jpg)
More fun stuff• Can write showme a different way:
def __repr__(self):
return str(self.value)
• Now can do:
print t # prints "10"
print "thingy: %s" % t # prints "thingy: 10"
• __repr__ converts object to string
![Page 16: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/16.jpg)
"Special" methods
• All start and end with __ (two underscores)
• Most are used to emulate functionality of built-in types in user-defined classes
• e.g. operator overloading• __add__, __sub__, __mult__, ...
• see python docs for more information
![Page 17: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/17.jpg)
Exception handling
• What do we do when something goes wrong in code?
• exit program (too drastic)
• return an integer error code (clutters code)
• Exception handling is a cleaner way to deal with this
• Errors "raise" an exception
• Other code can "catch" an exception and deal with it
![Page 18: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/18.jpg)
try/raise/except (1)
try: a = 1 / 0 # this raises ZeroDivisionErrorexcept ZeroDivisionError: # catch and handle the exception print "divide by zero" a = -1 # lame!
![Page 19: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/19.jpg)
try/raise/except (2)
try:
# code that raises IOError or # IndexErrorexcept IOError: # catch and handle IOErrorsexcept IndexError: # catch and handle IndexErrors
![Page 20: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/20.jpg)
try/raise/except (3)
try: a = 1 / 0 # this raises ZeroDivisionErrorexcept: # no exception specified # catches ANY exception print "something bad happened" # Don’t do this!
![Page 21: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/21.jpg)
Backtraces
• Uncaught exceptions give rise to a stack backtrace:# python bogus.py
Traceback (most recent call last):
file "bogus.py", line 5, in ?
foo()
file "bogus.py", line 2, in foo
a = 1 / 0
ZeroDivisionError: integer division or modulo by zero
• Backtrace is better than catch-all exception handler
![Page 22: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/22.jpg)
Exceptions are classes
class SomeException:
def __init__(self, msg=None):
self.msg = msg
def __repr__(self):
return str(self.msg)
• This exception class can be called with or without a single argument, which represents a (hopefully) meaningful error message
![Page 23: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/23.jpg)
Raising exceptions (1)
def some_function():
if something_bad_happens():
# SomeException leaves function
raise SomeException("bad!")
else:
# do the normal thing
![Page 24: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/24.jpg)
Raising exceptions (2)
def some_other_function():
try:
some_function()
except SomeException, e:
# e gets the exception that was caught
print e.msg
![Page 25: python lecture 2courses.cms.caltech.edu/.../python/lectures/python_lecture_2.pdf · CS 11 python track: lecture 2 • Today: • Odds and ends • Introduction to object-oriented](https://reader030.fdocuments.in/reader030/viewer/2022020214/5aa69b8a7f8b9ae7438ef28a/html5/thumbnails/25.jpg)
Summing up
• Use classes where possible
• Use exceptions to deal with error situations
• Use docstrings for documentation
• In two weeks: more OOP (inheritance)