SlideShare a Scribd company logo
1 of 67
Feb 15, 2016 Advanced Programming
Spring 2002
Python
Henning Schulzrinne
Department of Computer Science
Columbia University
(based on tutorial by Guido van Rossum)
Feb 15, 2016 Advanced
Introduction
 Most recent popular
(scripting/extension) language
 although origin ~1991
 heritage: teaching language (ABC)
 Tcl: shell
 perl: string (regex) processing
 object-oriented
 rather than add-on (OOTcl)
Feb 15, 2016 Advanced
Python philosophy
 Coherence
 not hard to read, write and maintain
 power
 scope
 rapid development + large systems
 objects
 integration
 hybrid systems
Feb 15, 2016 Advanced
Python features
no compiling or linking rapid development cycle
no type declarations simpler, shorter, more flexible
automatic memory management garbage collection
high-level data types and
operations
fast development
object-oriented programming code structuring and reuse, C++
embedding and extending in C mixed language systems
classes, modules, exceptions "programming-in-the-large" support
dynamic loading of C modules simplified extensions, smaller
binaries
dynamic reloading of C modules programs can be modified without
stopping
Lutz, Programming Python
Feb 15, 2016 Advanced
Python features
universal "first-class" object model fewer restrictions and rules
run-time program construction handles unforeseen needs, end-
user coding
interactive, dynamic nature incremental development and
testing
access to interpreter information metaprogramming, introspective
objects
wide portability cross-platform programming
without ports
compilation to portable byte-code execution speed, protecting source
code
built-in interfaces to external
services
system tools, GUIs, persistence,
databases, etc.
Lutz, Programming Python
Feb 15, 2016 Advanced
Python
 elements from C++, Modula-3
(modules), ABC, Icon (slicing)
 same family as Perl, Tcl, Scheme,
REXX, BASIC dialects
Feb 15, 2016 Advanced
Uses of Python
 shell tools
 system admin tools, command line programs
 extension-language work
 rapid prototyping and development
 language-based modules
 instead of special-purpose parsers
 graphical user interfaces
 database access
 distributed programming
 Internet scripting
Feb 15, 2016 Advanced
What not to use Python (and
kin) for
 most scripting languages share these
 not as efficient as C
 but sometimes better built-in algorithms
(e.g., hashing and sorting)
 delayed error notification
 lack of profiling tools
Feb 15, 2016 Advanced
Using python
 /usr/local/bin/python
 #! /usr/bin/env python
 interactive use
Python 1.6 (#1, Sep 24 2000, 20:40:45) [GCC 2.95.1 19990816 (release)] on sunos5
Copyright (c) 1995-2000 Corporation for National Research Initiatives.
All Rights Reserved.
Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam.
All Rights Reserved.
>>>
 python –c command [arg] ...
 python –i script
 read script first, then interactive
Feb 15, 2016 Advanced
Python structure
 modules: Python source files or C extensions
 import, top-level via from, reload
 statements
 control flow
 create objects
 indentation matters – instead of {}
 objects
 everything is an object
 automatically reclaimed when no longer needed
Feb 15, 2016 Advanced
First example
#!/usr/local/bin/python
# import systems module
import sys
marker = '::::::'
for name in sys.argv[1:]:
input = open(name, 'r')
print marker + name
print input.read()
Feb 15, 2016 Advanced
Basic operations
 Assignment:
 size = 40
 a = b = c = 3
 Numbers
 integer, float
 complex numbers: 1j+3, abs(z)
 Strings
 'hello world', 'it's hot'
 "bye world"
 continuation via  or use """ long text """"
Feb 15, 2016 Advanced
String operations
 concatenate with + or neighbors
 word = 'Help' + x
 word = 'Help' 'a'
 subscripting of strings
 'Hello'[2]  'l'
 slice: 'Hello'[1:2]  'el'
 word[-1]  last character
 len(word)  5
 immutable: cannot assign to subscript
Feb 15, 2016 Advanced
Lists
 lists can be heterogeneous
 a = ['spam', 'eggs', 100, 1234, 2*2]
 Lists can be indexed and sliced:
 a[0]  spam
 a[:2]  ['spam', 'eggs']
 Lists can be manipulated
 a[2] = a[2] + 23
 a[0:2] = [1,12]
 a[0:0] = []
 len(a)  5
Feb 15, 2016 Advanced
Basic programming
a,b = 0, 1
# non-zero = true
while b < 10:
# formatted output, without n
print b,
# multiple assignment
a,b = b, a+b
Feb 15, 2016 Advanced
Control flow: if
x = int(raw_input("Please enter #:"))
if x < 0:
x = 0
print 'Negative changed to zero'
elif x == 0:
print 'Zero'
elif x == 1:
print 'Single'
else:
print 'More'
 no case statement
Feb 15, 2016 Advanced
Control flow: for
a = ['cat', 'window', 'defenestrate']
for x in a:
print x, len(x)
 no arithmetic progression, but
 range(10)  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
 for i in range(len(a)):
print i, a[i]
 do not modify the sequence being iterated
over
Feb 15, 2016 Advanced
Loops: break, continue, else
 break and continue like C
 else after loop exhaustion
for n in range(2,10):
for x in range(2,n):
if n % x == 0:
print n, 'equals', x, '*', n/x
break
else:
# loop fell through without finding a factor
print n, 'is prime'
Feb 15, 2016 Advanced
Do nothing
 pass does nothing
 syntactic filler
while 1:
pass
Feb 15, 2016 Advanced
Defining functions
def fib(n):
"""Print a Fibonacci series up to n."""
a, b = 0, 1
while b < n:
print b,
a, b = b, a+b
>>> fib(2000)
 First line is docstring
 first look for variables in local, then global
 need global to assign global variables
Feb 15, 2016 Advanced
Functions: default argument
values
def ask_ok(prompt, retries=4,
complaint='Yes or no, please!'):
while 1:
ok = raw_input(prompt)
if ok in ('y', 'ye', 'yes'): return 1
if ok in ('n', 'no'): return 0
retries = retries - 1
if retries < 0: raise IOError,
'refusenik error'
print complaint
>>> ask_ok('Really?')
Feb 15, 2016 Advanced
Keyword arguments
 last arguments can be given as keywords
def parrot(voltage, state='a stiff', action='voom',
type='Norwegian blue'):
print "-- This parrot wouldn't", action,
print "if you put", voltage, "Volts through it."
print "Lovely plumage, the ", type
print "-- It's", state, "!"
parrot(1000)
parrot(action='VOOOM', voltage=100000)
Feb 15, 2016 Advanced
Lambda forms
 anonymous functions
 may not work in older versions
def make_incrementor(n):
return lambda x: x + n
f = make_incrementor(42)
f(0)
f(1)
Feb 15, 2016 Advanced
List methods
 append(x)
 extend(L)
 append all items in list (like Tcl lappend)
 insert(i,x)
 remove(x)
 pop([i]), pop()
 create stack (FIFO), or queue (LIFO)  pop(0)
 index(x)
 return the index for value x
Feb 15, 2016 Advanced
List methods
 count(x)
 how many times x appears in list
 sort()
 sort items in place
 reverse()
 reverse list
Feb 15, 2016 Advanced
Functional programming
tools
 filter(function, sequence)
def f(x): return x%2 != 0 and x%3 0
filter(f, range(2,25))
 map(function, sequence)
 call function for each item
 return list of return values
 reduce(function, sequence)
 return a single value
 call binary function on the first two items
 then on the result and next item
 iterate
Feb 15, 2016 Advanced
List comprehensions (2.0)
 Create lists without map(),
filter(), lambda
 = expression followed by for clause +
zero or more for or of clauses
>>> vec = [2,4,6]
>>> [3*x for x in vec]
[6, 12, 18]
>>> [{x: x**2} for x in vec}
[{2: 4}, {4: 16}, {6: 36}]
Feb 15, 2016 Advanced
List comprehensions
 cross products:
>>> vec1 = [2,4,6]
>>> vec2 = [4,3,-9]
>>> [x*y for x in vec1 for y in vec2]
[8,6,-18, 16,12,-36, 24,18,-54]
>>> [x+y for x in vec1 and y in vec2]
[6,5,-7,8,7,-5,10,9,-3]
>>> [vec1[i]*vec2[i] for i in
range(len(vec1))]
[8,12,-54]
Feb 15, 2016 Advanced
List comprehensions
 can also use if:
>>> [3*x for x in vec if x > 3]
[12, 18]
>>> [3*x for x in vec if x < 2]
[]
Feb 15, 2016 Advanced
del – removing list items
 remove by index, not value
 remove slices from list (rather than by
assigning an empty list)
>>> a = [-1,1,66.6,333,333,1234.5]
>>> del a[0]
>>> a
[1,66.6,333,333,1234.5]
>>> del a[2:4]
>>> a
[1,66.6,1234.5]
Feb 15, 2016 Advanced
Tuples and sequences
 lists, strings, tuples: examples of
sequence type
 tuple = values separated by commas
>>> t = 123, 543, 'bar'
>>> t[0]
123
>>> t
(123, 543, 'bar')
Feb 15, 2016 Advanced
Tuples
 Tuples may be nested
>>> u = t, (1,2)
>>> u
((123, 542, 'bar'), (1,2))
 kind of like structs, but no element names:
 (x,y) coordinates
 database records
 like strings, immutable  can't assign to
individual items
Feb 15, 2016 Advanced
Tuples
 Empty tuples: ()
>>> empty = ()
>>> len(empty)
0
 one item  trailing comma
>>> singleton = 'foo',
Feb 15, 2016 Advanced
Tuples
 sequence unpacking  distribute
elements across variables
>>> t = 123, 543, 'bar'
>>> x, y, z = t
>>> x
123
 packing always creates tuple
 unpacking works for any sequence
Feb 15, 2016 Advanced
Dictionaries
 like Tcl or awk associative arrays
 indexed by keys
 keys are any immutable type: e.g., tuples
 but not lists (mutable!)
 uses 'key: value' notation
>>> tel = {'hgs' : 7042, 'lennox': 7018}
>>> tel['cs'] = 7000
>>> tel
Feb 15, 2016 Advanced
Dictionaries
 no particular order
 delete elements with del
>>> del tel['foo']
 keys() method  unsorted list of keys
>>> tel.keys()
['cs', 'lennox', 'hgs']
 use has_key() to check for existence
>>> tel.has_key('foo')
0
Feb 15, 2016 Advanced
Conditions
 can check for sequence membership with is
and is not:
>>> if (4 in vec):
... print '4 is'
 chained comparisons: a less than b AND b
equals c:
a < b == c
 and and or are short-circuit operators:
 evaluated from left to right
 stop evaluation as soon as outcome clear
Feb 15, 2016 Advanced
Conditions
 Can assign comparison to variable:
>>> s1,s2,s3='', 'foo', 'bar'
>>> non_null = s1 or s2 or s3
>>> non_null
foo
 Unlike C, no assignment within
expression
Feb 15, 2016 Advanced
Comparing sequences
 unlike C, can compare sequences (lists,
tuples, ...)
 lexicographical comparison:
 compare first; if different  outcome
 continue recursively
 subsequences are smaller
 strings use ASCII comparison
 can compare objects of different type, but
by type name (list < string < tuple)
Feb 15, 2016 Advanced
Comparing sequences
(1,2,3) < (1,2,4)
[1,2,3] < [1,2,4]
'ABC' < 'C' < 'Pascal' < 'Python'
(1,2,3) == (1.0,2.0,3.0)
(1,2) < (1,2,-1)
Feb 15, 2016 Advanced
Modules
 collection of functions and variables,
typically in scripts
 definitions can be imported
 file name is module name + .py
 e.g., create module fibo.py
def fib(n): # write Fib. series up to n
...
def fib2(n): # return Fib. series up to n
Feb 15, 2016 Advanced
Modules
 import module:
import fibo
 Use modules via "name space":
>>> fibo.fib(1000)
>>> fibo.__name__
'fibo'
 can give it a local name:
>>> fib = fibo.fib
>>> fib(500)
Feb 15, 2016 Advanced
Modules
 function definition + executable statements
 executed only when module is imported
 modules have private symbol tables
 avoids name clash for global variables
 accessible as module.globalname
 can import into name space:
>>> from fibo import fib, fib2
>>> fib(500)
 can import all names defined by module:
>>> from fibo import *
Feb 15, 2016 Advanced
Module search path
 current directory
 list of directories specified in PYTHONPATH
environment variable
 uses installation-default if not defined, e.g.,
.:/usr/local/lib/python
 uses sys.path
>>> import sys
>>> sys.path
['', 'C:PROGRA~1Python2.2', 'C:Program
FilesPython2.2DLLs', 'C:Program
FilesPython2.2lib', 'C:Program
FilesPython2.2liblib-tk', 'C:Program
FilesPython2.2', 'C:Program FilesPython2.2libsite-
packages']
Feb 15, 2016 Advanced
Compiled Python files
 include byte-compiled version of module if
there exists fibo.pyc in same directory as
fibo.py
 only if creation time of fibo.pyc matches
fibo.py
 automatically write compiled file, if possible
 platform independent
 doesn't run any faster, but loads faster
 can have only .pyc file  hide source
Feb 15, 2016 Advanced
Standard modules
 system-dependent list
 always sys module
>>> import sys
>>> sys.p1
'>>> '
>>> sys.p2
'... '
>>> sys.path.append('/some/directory')
Feb 15, 2016 Advanced
Module listing
 use dir() for each module
>>> dir(fibo)
['___name___', 'fib', 'fib2']
>>> dir(sys)
['__displayhook__', '__doc__', '__excepthook__', '__name__', '__stderr__', '__st
din__', '__stdout__', '_getframe', 'argv', 'builtin_module_names', 'byteorder',
'copyright', 'displayhook', 'dllhandle', 'exc_info', 'exc_type', 'excepthook', '
exec_prefix', 'executable', 'exit', 'getdefaultencoding', 'getrecursionlimit', '
getrefcount', 'hexversion', 'last_type', 'last_value', 'maxint', 'maxunicode', '
modules', 'path', 'platform', 'prefix', 'ps1', 'ps2', 'setcheckinterval', 'setpr
ofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'version',
'version_info', 'warnoptions', 'winver']
Feb 15, 2016 Advanced
Classes
 mixture of C++ and Modula-3
 multiple base classes
 derived class can override any methods of its
base class(es)
 method can call the method of a base class
with the same name
 objects have private data
 C++ terms:
 all class members are public
 all member functions are virtual
 no constructors or destructors (not needed)
Feb 15, 2016 Advanced
Classes
 classes (and data types) are objects
 built-in types cannot be used as base
classes by user
 arithmetic operators, subscripting can
be redefined for class instances (like C+
+, unlike Java)
Feb 15, 2016 Advanced
Class definitions
Class ClassName:
<statement-1>
...
<statement-N>
 must be executed
 can be executed conditionally (see Tcl)
 creates new namespace
Feb 15, 2016 Advanced
Namespaces
 mapping from name to object:
 built-in names (abs())
 global names in module
 local names in function invocation
 attributes = any following a dot
 z.real, z.imag
 attributes read-only or writable
 module attributes are writeable
Feb 15, 2016 Advanced
Namespaces
 scope = textual region of Python program
where a namespace is directly accessible
(without dot)
 innermost scope (first) = local names
 middle scope = current module's global names
 outermost scope (last) = built-in names
 assignments always affect innermost scope
 don't copy, just create name bindings to objects
 global indicates name is in global scope
Feb 15, 2016 Advanced
Class objects
 obj.name references (plus module!):
class MyClass:
"A simple example class"
i = 123
def f(self):
return 'hello world'
>>> MyClass.i
123
 MyClass.f is method object
Feb 15, 2016 Advanced
Class objects
 class instantiation:
>>> x = MyClass()
>>> x.f()
'hello world'
 creates new instance of class
 note x = MyClass vs. x = MyClass()
 ___init__() special method for
initialization of object
def __init__(self,realpart,imagpart):
self.r = realpart
self.i = imagpart
Feb 15, 2016 Advanced
Instance objects
 attribute references
 data attributes (C++/Java data
members)
 created dynamically
x.counter = 1
while x.counter < 10:
x.counter = x.counter * 2
print x.counter
del x.counter
Feb 15, 2016 Advanced
Method objects
 Called immediately:
x.f()
 can be referenced:
xf = x.f
while 1:
print xf()
 object is passed as first argument of
function  'self'
 x.f() is equivalent to MyClass.f(x)
Feb 15, 2016 Advanced
Notes on classes
 Data attributes override method
attributes with the same name
 no real hiding  not usable to
implement pure abstract data types
 clients (users) of an object can add data
attributes
 first argument of method usually called
self
 'self' has no special meaning (cf. Java)
Feb 15, 2016 Advanced
Another example
 bag.py
class Bag:
def __init__(self):
self.data = []
def add(self, x):
self.data.append(x)
def addtwice(self,x):
self.add(x)
self.add(x)
Feb 15, 2016 Advanced
Another example, cont'd.
 invoke:
>>> from bag import *
>>> l = Bag()
>>> l.add('first')
>>> l.add('second')
>>> l.data
['first', 'second']
Feb 15, 2016 Advanced
Inheritance
class DerivedClassName(BaseClassName)
<statement-1>
...
<statement-N>
 search class attribute, descending
chain of base classes
 may override methods in the base class
 call directly via BaseClassName.method
Feb 15, 2016 Advanced
Multiple inheritance
class DerivedClass(Base1,Base2,Base3):
<statement>
 depth-first, left-to-right
 problem: class derived from two classes
with a common base class
Feb 15, 2016 Advanced
Private variables
 No real support, but textual replacement
(name mangling)
 __var is replaced by
_classname_var
 prevents only accidental modification,
not true protection
Feb 15, 2016 Advanced
~ C structs
 Empty class definition:
class Employee:
pass
john = Employee()
john.name = 'John Doe'
john.dept = 'CS'
john.salary = 1000
Feb 15, 2016 Advanced
Exceptions
 syntax (parsing) errors
while 1 print 'Hello World'
File "<stdin>", line 1
while 1 print 'Hello World'
^
SyntaxError: invalid syntax
 exceptions
 run-time errors
 e.g., ZeroDivisionError,
NameError, TypeError
Feb 15, 2016 Advanced
Handling exceptions
while 1:
try:
x = int(raw_input("Please enter a number: "))
break
except ValueError:
print "Not a valid number"
 First, execute try clause
 if no exception, skip except clause
 if exception, skip rest of try clause and use except
clause
 if no matching exception, attempt outer try
statement
Feb 15, 2016 Advanced
Handling exceptions
 try.py
import sys
for arg in sys.argv[1:]:
try:
f = open(arg, 'r')
except IOError:
print 'cannot open', arg
else:
print arg, 'lines:', len(f.readlines())
f.close
 e.g., as python try.py *.py
Feb 15, 2016 Advanced
Language comparison
Tcl Perl Python JavaScript Visual
Basic
Speed development     
regexp   
breadth extensible   
embeddable  
easy GUI   (Tk) 
net/web     
enterprise cross-platform    
I18N    
thread-safe   
database access     

More Related Content

What's hot

Python for R Users
Python for R UsersPython for R Users
Python for R UsersAjay Ohri
 
R for Pirates. ESCCONF October 27, 2011
R for Pirates. ESCCONF October 27, 2011R for Pirates. ESCCONF October 27, 2011
R for Pirates. ESCCONF October 27, 2011Mandi Walls
 
Odessapy2013 - Graph databases and Python
Odessapy2013 - Graph databases and PythonOdessapy2013 - Graph databases and Python
Odessapy2013 - Graph databases and PythonMax Klymyshyn
 
Clojure: The Art of Abstraction
Clojure: The Art of AbstractionClojure: The Art of Abstraction
Clojure: The Art of AbstractionAlex Miller
 
Distributed algorithms for big data @ GeeCon
Distributed algorithms for big data @ GeeConDistributed algorithms for big data @ GeeCon
Distributed algorithms for big data @ GeeConDuyhai Doan
 
Haskell in the Real World
Haskell in the Real WorldHaskell in the Real World
Haskell in the Real Worldosfameron
 
Optimizing Tcl Bytecode
Optimizing Tcl BytecodeOptimizing Tcl Bytecode
Optimizing Tcl BytecodeDonal Fellows
 
First few months with Kotlin - Introduction through android examples
First few months with Kotlin - Introduction through android examplesFirst few months with Kotlin - Introduction through android examples
First few months with Kotlin - Introduction through android examplesNebojša Vukšić
 
Introduction to R programming
Introduction to R programmingIntroduction to R programming
Introduction to R programmingAlberto Labarga
 
R Programming: Importing Data In R
R Programming: Importing Data In RR Programming: Importing Data In R
R Programming: Importing Data In RRsquared Academy
 
Class 26: Objectifying Objects
Class 26: Objectifying ObjectsClass 26: Objectifying Objects
Class 26: Objectifying ObjectsDavid Evans
 
Introduction to R Programming
Introduction to R ProgrammingIntroduction to R Programming
Introduction to R Programmingizahn
 
Python for R developers and data scientists
Python for R developers and data scientistsPython for R developers and data scientists
Python for R developers and data scientistsLambda Tree
 
Writing Domain-Specific Languages for BeepBeep
Writing Domain-Specific Languages for BeepBeepWriting Domain-Specific Languages for BeepBeep
Writing Domain-Specific Languages for BeepBeepSylvain Hallé
 
Merge Multiple CSV in single data frame using R
Merge Multiple CSV in single data frame using RMerge Multiple CSV in single data frame using R
Merge Multiple CSV in single data frame using RYogesh Khandelwal
 
Is there a perfect data-parallel programming language? (Experiments with More...
Is there a perfect data-parallel programming language? (Experiments with More...Is there a perfect data-parallel programming language? (Experiments with More...
Is there a perfect data-parallel programming language? (Experiments with More...Julian Hyde
 
Making an Object System with Tcl 8.5
Making an Object System with Tcl 8.5Making an Object System with Tcl 8.5
Making an Object System with Tcl 8.5Donal Fellows
 
FP Day 2011 - Turning to the Functional Side (using C# & F#)
FP Day 2011 - Turning to the Functional Side (using C# & F#)FP Day 2011 - Turning to the Functional Side (using C# & F#)
FP Day 2011 - Turning to the Functional Side (using C# & F#)Phillip Trelford
 

What's hot (20)

Python for R Users
Python for R UsersPython for R Users
Python for R Users
 
R for Pirates. ESCCONF October 27, 2011
R for Pirates. ESCCONF October 27, 2011R for Pirates. ESCCONF October 27, 2011
R for Pirates. ESCCONF October 27, 2011
 
Odessapy2013 - Graph databases and Python
Odessapy2013 - Graph databases and PythonOdessapy2013 - Graph databases and Python
Odessapy2013 - Graph databases and Python
 
Clojure: The Art of Abstraction
Clojure: The Art of AbstractionClojure: The Art of Abstraction
Clojure: The Art of Abstraction
 
Distributed algorithms for big data @ GeeCon
Distributed algorithms for big data @ GeeConDistributed algorithms for big data @ GeeCon
Distributed algorithms for big data @ GeeCon
 
R basics
R basicsR basics
R basics
 
Haskell in the Real World
Haskell in the Real WorldHaskell in the Real World
Haskell in the Real World
 
Optimizing Tcl Bytecode
Optimizing Tcl BytecodeOptimizing Tcl Bytecode
Optimizing Tcl Bytecode
 
R Language Introduction
R Language IntroductionR Language Introduction
R Language Introduction
 
First few months with Kotlin - Introduction through android examples
First few months with Kotlin - Introduction through android examplesFirst few months with Kotlin - Introduction through android examples
First few months with Kotlin - Introduction through android examples
 
Introduction to R programming
Introduction to R programmingIntroduction to R programming
Introduction to R programming
 
R Programming: Importing Data In R
R Programming: Importing Data In RR Programming: Importing Data In R
R Programming: Importing Data In R
 
Class 26: Objectifying Objects
Class 26: Objectifying ObjectsClass 26: Objectifying Objects
Class 26: Objectifying Objects
 
Introduction to R Programming
Introduction to R ProgrammingIntroduction to R Programming
Introduction to R Programming
 
Python for R developers and data scientists
Python for R developers and data scientistsPython for R developers and data scientists
Python for R developers and data scientists
 
Writing Domain-Specific Languages for BeepBeep
Writing Domain-Specific Languages for BeepBeepWriting Domain-Specific Languages for BeepBeep
Writing Domain-Specific Languages for BeepBeep
 
Merge Multiple CSV in single data frame using R
Merge Multiple CSV in single data frame using RMerge Multiple CSV in single data frame using R
Merge Multiple CSV in single data frame using R
 
Is there a perfect data-parallel programming language? (Experiments with More...
Is there a perfect data-parallel programming language? (Experiments with More...Is there a perfect data-parallel programming language? (Experiments with More...
Is there a perfect data-parallel programming language? (Experiments with More...
 
Making an Object System with Tcl 8.5
Making an Object System with Tcl 8.5Making an Object System with Tcl 8.5
Making an Object System with Tcl 8.5
 
FP Day 2011 - Turning to the Functional Side (using C# & F#)
FP Day 2011 - Turning to the Functional Side (using C# & F#)FP Day 2011 - Turning to the Functional Side (using C# & F#)
FP Day 2011 - Turning to the Functional Side (using C# & F#)
 

Similar to Python basics - for bigginers

Similar to Python basics - for bigginers (20)

Python classes in mumbai
Python classes in mumbaiPython classes in mumbai
Python classes in mumbai
 
python.ppt
python.pptpython.ppt
python.ppt
 
sonam Kumari python.ppt
sonam Kumari python.pptsonam Kumari python.ppt
sonam Kumari python.ppt
 
Introduction to python
Introduction to pythonIntroduction to python
Introduction to python
 
Data analysis in R
Data analysis in RData analysis in R
Data analysis in R
 
python.ppt
python.pptpython.ppt
python.ppt
 
Python basics
Python basicsPython basics
Python basics
 
python presentation lists,strings,operation
python presentation lists,strings,operationpython presentation lists,strings,operation
python presentation lists,strings,operation
 
python.ppt
python.pptpython.ppt
python.ppt
 
Os Vanrossum
Os VanrossumOs Vanrossum
Os Vanrossum
 
What's new in Python 3.11
What's new in Python 3.11What's new in Python 3.11
What's new in Python 3.11
 
python.ppt
python.pptpython.ppt
python.ppt
 
Python
PythonPython
Python
 
An Overview Of Python With Functional Programming
An Overview Of Python With Functional ProgrammingAn Overview Of Python With Functional Programming
An Overview Of Python With Functional Programming
 
Lecture1_R.ppt
Lecture1_R.pptLecture1_R.ppt
Lecture1_R.ppt
 
Lecture1_R.ppt
Lecture1_R.pptLecture1_R.ppt
Lecture1_R.ppt
 
Lecture1 r
Lecture1 rLecture1 r
Lecture1 r
 
Modeling in R Programming Language for Beginers.ppt
Modeling in R Programming Language for Beginers.pptModeling in R Programming Language for Beginers.ppt
Modeling in R Programming Language for Beginers.ppt
 
python.ppt
python.pptpython.ppt
python.ppt
 
Data Analysis with R (combined slides)
Data Analysis with R (combined slides)Data Analysis with R (combined slides)
Data Analysis with R (combined slides)
 

Recently uploaded

Unit 1 - Soil Classification and Compaction.pdf
Unit 1 - Soil Classification and Compaction.pdfUnit 1 - Soil Classification and Compaction.pdf
Unit 1 - Soil Classification and Compaction.pdfRagavanV2
 
2016EF22_0 solar project report rooftop projects
2016EF22_0 solar project report rooftop projects2016EF22_0 solar project report rooftop projects
2016EF22_0 solar project report rooftop projectssmsksolar
 
22-prompt engineering noted slide shown.pdf
22-prompt engineering noted slide shown.pdf22-prompt engineering noted slide shown.pdf
22-prompt engineering noted slide shown.pdf203318pmpc
 
Call Girls In Bangalore ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bangalore ☎ 7737669865 🥵 Book Your One night StandCall Girls In Bangalore ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bangalore ☎ 7737669865 🥵 Book Your One night Standamitlee9823
 
Double Revolving field theory-how the rotor develops torque
Double Revolving field theory-how the rotor develops torqueDouble Revolving field theory-how the rotor develops torque
Double Revolving field theory-how the rotor develops torqueBhangaleSonal
 
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756dollysharma2066
 
Block diagram reduction techniques in control systems.ppt
Block diagram reduction techniques in control systems.pptBlock diagram reduction techniques in control systems.ppt
Block diagram reduction techniques in control systems.pptNANDHAKUMARA10
 
Work-Permit-Receiver-in-Saudi-Aramco.pptx
Work-Permit-Receiver-in-Saudi-Aramco.pptxWork-Permit-Receiver-in-Saudi-Aramco.pptx
Work-Permit-Receiver-in-Saudi-Aramco.pptxJuliansyahHarahap1
 
UNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its PerformanceUNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its Performancesivaprakash250
 
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...Arindam Chakraborty, Ph.D., P.E. (CA, TX)
 
Minimum and Maximum Modes of microprocessor 8086
Minimum and Maximum Modes of microprocessor 8086Minimum and Maximum Modes of microprocessor 8086
Minimum and Maximum Modes of microprocessor 8086anil_gaur
 
Introduction to Serverless with AWS Lambda
Introduction to Serverless with AWS LambdaIntroduction to Serverless with AWS Lambda
Introduction to Serverless with AWS LambdaOmar Fathy
 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXssuser89054b
 
Employee leave management system project.
Employee leave management system project.Employee leave management system project.
Employee leave management system project.Kamal Acharya
 
notes on Evolution Of Analytic Scalability.ppt
notes on Evolution Of Analytic Scalability.pptnotes on Evolution Of Analytic Scalability.ppt
notes on Evolution Of Analytic Scalability.pptMsecMca
 
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...SUHANI PANDEY
 
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdfONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdfKamal Acharya
 
Hazard Identification (HAZID) vs. Hazard and Operability (HAZOP): A Comparati...
Hazard Identification (HAZID) vs. Hazard and Operability (HAZOP): A Comparati...Hazard Identification (HAZID) vs. Hazard and Operability (HAZOP): A Comparati...
Hazard Identification (HAZID) vs. Hazard and Operability (HAZOP): A Comparati...soginsider
 

Recently uploaded (20)

Unit 1 - Soil Classification and Compaction.pdf
Unit 1 - Soil Classification and Compaction.pdfUnit 1 - Soil Classification and Compaction.pdf
Unit 1 - Soil Classification and Compaction.pdf
 
2016EF22_0 solar project report rooftop projects
2016EF22_0 solar project report rooftop projects2016EF22_0 solar project report rooftop projects
2016EF22_0 solar project report rooftop projects
 
22-prompt engineering noted slide shown.pdf
22-prompt engineering noted slide shown.pdf22-prompt engineering noted slide shown.pdf
22-prompt engineering noted slide shown.pdf
 
Call Girls In Bangalore ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bangalore ☎ 7737669865 🥵 Book Your One night StandCall Girls In Bangalore ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bangalore ☎ 7737669865 🥵 Book Your One night Stand
 
Double Revolving field theory-how the rotor develops torque
Double Revolving field theory-how the rotor develops torqueDouble Revolving field theory-how the rotor develops torque
Double Revolving field theory-how the rotor develops torque
 
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
 
Block diagram reduction techniques in control systems.ppt
Block diagram reduction techniques in control systems.pptBlock diagram reduction techniques in control systems.ppt
Block diagram reduction techniques in control systems.ppt
 
Work-Permit-Receiver-in-Saudi-Aramco.pptx
Work-Permit-Receiver-in-Saudi-Aramco.pptxWork-Permit-Receiver-in-Saudi-Aramco.pptx
Work-Permit-Receiver-in-Saudi-Aramco.pptx
 
UNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its PerformanceUNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its Performance
 
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
 
Minimum and Maximum Modes of microprocessor 8086
Minimum and Maximum Modes of microprocessor 8086Minimum and Maximum Modes of microprocessor 8086
Minimum and Maximum Modes of microprocessor 8086
 
Introduction to Serverless with AWS Lambda
Introduction to Serverless with AWS LambdaIntroduction to Serverless with AWS Lambda
Introduction to Serverless with AWS Lambda
 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 
Employee leave management system project.
Employee leave management system project.Employee leave management system project.
Employee leave management system project.
 
notes on Evolution Of Analytic Scalability.ppt
notes on Evolution Of Analytic Scalability.pptnotes on Evolution Of Analytic Scalability.ppt
notes on Evolution Of Analytic Scalability.ppt
 
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
 
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
 
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdfONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
 
Hazard Identification (HAZID) vs. Hazard and Operability (HAZOP): A Comparati...
Hazard Identification (HAZID) vs. Hazard and Operability (HAZOP): A Comparati...Hazard Identification (HAZID) vs. Hazard and Operability (HAZOP): A Comparati...
Hazard Identification (HAZID) vs. Hazard and Operability (HAZOP): A Comparati...
 
Call Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort ServiceCall Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
 

Python basics - for bigginers

  • 1. Feb 15, 2016 Advanced Programming Spring 2002 Python Henning Schulzrinne Department of Computer Science Columbia University (based on tutorial by Guido van Rossum)
  • 2. Feb 15, 2016 Advanced Introduction  Most recent popular (scripting/extension) language  although origin ~1991  heritage: teaching language (ABC)  Tcl: shell  perl: string (regex) processing  object-oriented  rather than add-on (OOTcl)
  • 3. Feb 15, 2016 Advanced Python philosophy  Coherence  not hard to read, write and maintain  power  scope  rapid development + large systems  objects  integration  hybrid systems
  • 4. Feb 15, 2016 Advanced Python features no compiling or linking rapid development cycle no type declarations simpler, shorter, more flexible automatic memory management garbage collection high-level data types and operations fast development object-oriented programming code structuring and reuse, C++ embedding and extending in C mixed language systems classes, modules, exceptions "programming-in-the-large" support dynamic loading of C modules simplified extensions, smaller binaries dynamic reloading of C modules programs can be modified without stopping Lutz, Programming Python
  • 5. Feb 15, 2016 Advanced Python features universal "first-class" object model fewer restrictions and rules run-time program construction handles unforeseen needs, end- user coding interactive, dynamic nature incremental development and testing access to interpreter information metaprogramming, introspective objects wide portability cross-platform programming without ports compilation to portable byte-code execution speed, protecting source code built-in interfaces to external services system tools, GUIs, persistence, databases, etc. Lutz, Programming Python
  • 6. Feb 15, 2016 Advanced Python  elements from C++, Modula-3 (modules), ABC, Icon (slicing)  same family as Perl, Tcl, Scheme, REXX, BASIC dialects
  • 7. Feb 15, 2016 Advanced Uses of Python  shell tools  system admin tools, command line programs  extension-language work  rapid prototyping and development  language-based modules  instead of special-purpose parsers  graphical user interfaces  database access  distributed programming  Internet scripting
  • 8. Feb 15, 2016 Advanced What not to use Python (and kin) for  most scripting languages share these  not as efficient as C  but sometimes better built-in algorithms (e.g., hashing and sorting)  delayed error notification  lack of profiling tools
  • 9. Feb 15, 2016 Advanced Using python  /usr/local/bin/python  #! /usr/bin/env python  interactive use Python 1.6 (#1, Sep 24 2000, 20:40:45) [GCC 2.95.1 19990816 (release)] on sunos5 Copyright (c) 1995-2000 Corporation for National Research Initiatives. All Rights Reserved. Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam. All Rights Reserved. >>>  python –c command [arg] ...  python –i script  read script first, then interactive
  • 10. Feb 15, 2016 Advanced Python structure  modules: Python source files or C extensions  import, top-level via from, reload  statements  control flow  create objects  indentation matters – instead of {}  objects  everything is an object  automatically reclaimed when no longer needed
  • 11. Feb 15, 2016 Advanced First example #!/usr/local/bin/python # import systems module import sys marker = '::::::' for name in sys.argv[1:]: input = open(name, 'r') print marker + name print input.read()
  • 12. Feb 15, 2016 Advanced Basic operations  Assignment:  size = 40  a = b = c = 3  Numbers  integer, float  complex numbers: 1j+3, abs(z)  Strings  'hello world', 'it's hot'  "bye world"  continuation via or use """ long text """"
  • 13. Feb 15, 2016 Advanced String operations  concatenate with + or neighbors  word = 'Help' + x  word = 'Help' 'a'  subscripting of strings  'Hello'[2]  'l'  slice: 'Hello'[1:2]  'el'  word[-1]  last character  len(word)  5  immutable: cannot assign to subscript
  • 14. Feb 15, 2016 Advanced Lists  lists can be heterogeneous  a = ['spam', 'eggs', 100, 1234, 2*2]  Lists can be indexed and sliced:  a[0]  spam  a[:2]  ['spam', 'eggs']  Lists can be manipulated  a[2] = a[2] + 23  a[0:2] = [1,12]  a[0:0] = []  len(a)  5
  • 15. Feb 15, 2016 Advanced Basic programming a,b = 0, 1 # non-zero = true while b < 10: # formatted output, without n print b, # multiple assignment a,b = b, a+b
  • 16. Feb 15, 2016 Advanced Control flow: if x = int(raw_input("Please enter #:")) if x < 0: x = 0 print 'Negative changed to zero' elif x == 0: print 'Zero' elif x == 1: print 'Single' else: print 'More'  no case statement
  • 17. Feb 15, 2016 Advanced Control flow: for a = ['cat', 'window', 'defenestrate'] for x in a: print x, len(x)  no arithmetic progression, but  range(10)  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  for i in range(len(a)): print i, a[i]  do not modify the sequence being iterated over
  • 18. Feb 15, 2016 Advanced Loops: break, continue, else  break and continue like C  else after loop exhaustion for n in range(2,10): for x in range(2,n): if n % x == 0: print n, 'equals', x, '*', n/x break else: # loop fell through without finding a factor print n, 'is prime'
  • 19. Feb 15, 2016 Advanced Do nothing  pass does nothing  syntactic filler while 1: pass
  • 20. Feb 15, 2016 Advanced Defining functions def fib(n): """Print a Fibonacci series up to n.""" a, b = 0, 1 while b < n: print b, a, b = b, a+b >>> fib(2000)  First line is docstring  first look for variables in local, then global  need global to assign global variables
  • 21. Feb 15, 2016 Advanced Functions: default argument values def ask_ok(prompt, retries=4, complaint='Yes or no, please!'): while 1: ok = raw_input(prompt) if ok in ('y', 'ye', 'yes'): return 1 if ok in ('n', 'no'): return 0 retries = retries - 1 if retries < 0: raise IOError, 'refusenik error' print complaint >>> ask_ok('Really?')
  • 22. Feb 15, 2016 Advanced Keyword arguments  last arguments can be given as keywords def parrot(voltage, state='a stiff', action='voom', type='Norwegian blue'): print "-- This parrot wouldn't", action, print "if you put", voltage, "Volts through it." print "Lovely plumage, the ", type print "-- It's", state, "!" parrot(1000) parrot(action='VOOOM', voltage=100000)
  • 23. Feb 15, 2016 Advanced Lambda forms  anonymous functions  may not work in older versions def make_incrementor(n): return lambda x: x + n f = make_incrementor(42) f(0) f(1)
  • 24. Feb 15, 2016 Advanced List methods  append(x)  extend(L)  append all items in list (like Tcl lappend)  insert(i,x)  remove(x)  pop([i]), pop()  create stack (FIFO), or queue (LIFO)  pop(0)  index(x)  return the index for value x
  • 25. Feb 15, 2016 Advanced List methods  count(x)  how many times x appears in list  sort()  sort items in place  reverse()  reverse list
  • 26. Feb 15, 2016 Advanced Functional programming tools  filter(function, sequence) def f(x): return x%2 != 0 and x%3 0 filter(f, range(2,25))  map(function, sequence)  call function for each item  return list of return values  reduce(function, sequence)  return a single value  call binary function on the first two items  then on the result and next item  iterate
  • 27. Feb 15, 2016 Advanced List comprehensions (2.0)  Create lists without map(), filter(), lambda  = expression followed by for clause + zero or more for or of clauses >>> vec = [2,4,6] >>> [3*x for x in vec] [6, 12, 18] >>> [{x: x**2} for x in vec} [{2: 4}, {4: 16}, {6: 36}]
  • 28. Feb 15, 2016 Advanced List comprehensions  cross products: >>> vec1 = [2,4,6] >>> vec2 = [4,3,-9] >>> [x*y for x in vec1 for y in vec2] [8,6,-18, 16,12,-36, 24,18,-54] >>> [x+y for x in vec1 and y in vec2] [6,5,-7,8,7,-5,10,9,-3] >>> [vec1[i]*vec2[i] for i in range(len(vec1))] [8,12,-54]
  • 29. Feb 15, 2016 Advanced List comprehensions  can also use if: >>> [3*x for x in vec if x > 3] [12, 18] >>> [3*x for x in vec if x < 2] []
  • 30. Feb 15, 2016 Advanced del – removing list items  remove by index, not value  remove slices from list (rather than by assigning an empty list) >>> a = [-1,1,66.6,333,333,1234.5] >>> del a[0] >>> a [1,66.6,333,333,1234.5] >>> del a[2:4] >>> a [1,66.6,1234.5]
  • 31. Feb 15, 2016 Advanced Tuples and sequences  lists, strings, tuples: examples of sequence type  tuple = values separated by commas >>> t = 123, 543, 'bar' >>> t[0] 123 >>> t (123, 543, 'bar')
  • 32. Feb 15, 2016 Advanced Tuples  Tuples may be nested >>> u = t, (1,2) >>> u ((123, 542, 'bar'), (1,2))  kind of like structs, but no element names:  (x,y) coordinates  database records  like strings, immutable  can't assign to individual items
  • 33. Feb 15, 2016 Advanced Tuples  Empty tuples: () >>> empty = () >>> len(empty) 0  one item  trailing comma >>> singleton = 'foo',
  • 34. Feb 15, 2016 Advanced Tuples  sequence unpacking  distribute elements across variables >>> t = 123, 543, 'bar' >>> x, y, z = t >>> x 123  packing always creates tuple  unpacking works for any sequence
  • 35. Feb 15, 2016 Advanced Dictionaries  like Tcl or awk associative arrays  indexed by keys  keys are any immutable type: e.g., tuples  but not lists (mutable!)  uses 'key: value' notation >>> tel = {'hgs' : 7042, 'lennox': 7018} >>> tel['cs'] = 7000 >>> tel
  • 36. Feb 15, 2016 Advanced Dictionaries  no particular order  delete elements with del >>> del tel['foo']  keys() method  unsorted list of keys >>> tel.keys() ['cs', 'lennox', 'hgs']  use has_key() to check for existence >>> tel.has_key('foo') 0
  • 37. Feb 15, 2016 Advanced Conditions  can check for sequence membership with is and is not: >>> if (4 in vec): ... print '4 is'  chained comparisons: a less than b AND b equals c: a < b == c  and and or are short-circuit operators:  evaluated from left to right  stop evaluation as soon as outcome clear
  • 38. Feb 15, 2016 Advanced Conditions  Can assign comparison to variable: >>> s1,s2,s3='', 'foo', 'bar' >>> non_null = s1 or s2 or s3 >>> non_null foo  Unlike C, no assignment within expression
  • 39. Feb 15, 2016 Advanced Comparing sequences  unlike C, can compare sequences (lists, tuples, ...)  lexicographical comparison:  compare first; if different  outcome  continue recursively  subsequences are smaller  strings use ASCII comparison  can compare objects of different type, but by type name (list < string < tuple)
  • 40. Feb 15, 2016 Advanced Comparing sequences (1,2,3) < (1,2,4) [1,2,3] < [1,2,4] 'ABC' < 'C' < 'Pascal' < 'Python' (1,2,3) == (1.0,2.0,3.0) (1,2) < (1,2,-1)
  • 41. Feb 15, 2016 Advanced Modules  collection of functions and variables, typically in scripts  definitions can be imported  file name is module name + .py  e.g., create module fibo.py def fib(n): # write Fib. series up to n ... def fib2(n): # return Fib. series up to n
  • 42. Feb 15, 2016 Advanced Modules  import module: import fibo  Use modules via "name space": >>> fibo.fib(1000) >>> fibo.__name__ 'fibo'  can give it a local name: >>> fib = fibo.fib >>> fib(500)
  • 43. Feb 15, 2016 Advanced Modules  function definition + executable statements  executed only when module is imported  modules have private symbol tables  avoids name clash for global variables  accessible as module.globalname  can import into name space: >>> from fibo import fib, fib2 >>> fib(500)  can import all names defined by module: >>> from fibo import *
  • 44. Feb 15, 2016 Advanced Module search path  current directory  list of directories specified in PYTHONPATH environment variable  uses installation-default if not defined, e.g., .:/usr/local/lib/python  uses sys.path >>> import sys >>> sys.path ['', 'C:PROGRA~1Python2.2', 'C:Program FilesPython2.2DLLs', 'C:Program FilesPython2.2lib', 'C:Program FilesPython2.2liblib-tk', 'C:Program FilesPython2.2', 'C:Program FilesPython2.2libsite- packages']
  • 45. Feb 15, 2016 Advanced Compiled Python files  include byte-compiled version of module if there exists fibo.pyc in same directory as fibo.py  only if creation time of fibo.pyc matches fibo.py  automatically write compiled file, if possible  platform independent  doesn't run any faster, but loads faster  can have only .pyc file  hide source
  • 46. Feb 15, 2016 Advanced Standard modules  system-dependent list  always sys module >>> import sys >>> sys.p1 '>>> ' >>> sys.p2 '... ' >>> sys.path.append('/some/directory')
  • 47. Feb 15, 2016 Advanced Module listing  use dir() for each module >>> dir(fibo) ['___name___', 'fib', 'fib2'] >>> dir(sys) ['__displayhook__', '__doc__', '__excepthook__', '__name__', '__stderr__', '__st din__', '__stdout__', '_getframe', 'argv', 'builtin_module_names', 'byteorder', 'copyright', 'displayhook', 'dllhandle', 'exc_info', 'exc_type', 'excepthook', ' exec_prefix', 'executable', 'exit', 'getdefaultencoding', 'getrecursionlimit', ' getrefcount', 'hexversion', 'last_type', 'last_value', 'maxint', 'maxunicode', ' modules', 'path', 'platform', 'prefix', 'ps1', 'ps2', 'setcheckinterval', 'setpr ofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'version', 'version_info', 'warnoptions', 'winver']
  • 48. Feb 15, 2016 Advanced Classes  mixture of C++ and Modula-3  multiple base classes  derived class can override any methods of its base class(es)  method can call the method of a base class with the same name  objects have private data  C++ terms:  all class members are public  all member functions are virtual  no constructors or destructors (not needed)
  • 49. Feb 15, 2016 Advanced Classes  classes (and data types) are objects  built-in types cannot be used as base classes by user  arithmetic operators, subscripting can be redefined for class instances (like C+ +, unlike Java)
  • 50. Feb 15, 2016 Advanced Class definitions Class ClassName: <statement-1> ... <statement-N>  must be executed  can be executed conditionally (see Tcl)  creates new namespace
  • 51. Feb 15, 2016 Advanced Namespaces  mapping from name to object:  built-in names (abs())  global names in module  local names in function invocation  attributes = any following a dot  z.real, z.imag  attributes read-only or writable  module attributes are writeable
  • 52. Feb 15, 2016 Advanced Namespaces  scope = textual region of Python program where a namespace is directly accessible (without dot)  innermost scope (first) = local names  middle scope = current module's global names  outermost scope (last) = built-in names  assignments always affect innermost scope  don't copy, just create name bindings to objects  global indicates name is in global scope
  • 53. Feb 15, 2016 Advanced Class objects  obj.name references (plus module!): class MyClass: "A simple example class" i = 123 def f(self): return 'hello world' >>> MyClass.i 123  MyClass.f is method object
  • 54. Feb 15, 2016 Advanced Class objects  class instantiation: >>> x = MyClass() >>> x.f() 'hello world'  creates new instance of class  note x = MyClass vs. x = MyClass()  ___init__() special method for initialization of object def __init__(self,realpart,imagpart): self.r = realpart self.i = imagpart
  • 55. Feb 15, 2016 Advanced Instance objects  attribute references  data attributes (C++/Java data members)  created dynamically x.counter = 1 while x.counter < 10: x.counter = x.counter * 2 print x.counter del x.counter
  • 56. Feb 15, 2016 Advanced Method objects  Called immediately: x.f()  can be referenced: xf = x.f while 1: print xf()  object is passed as first argument of function  'self'  x.f() is equivalent to MyClass.f(x)
  • 57. Feb 15, 2016 Advanced Notes on classes  Data attributes override method attributes with the same name  no real hiding  not usable to implement pure abstract data types  clients (users) of an object can add data attributes  first argument of method usually called self  'self' has no special meaning (cf. Java)
  • 58. Feb 15, 2016 Advanced Another example  bag.py class Bag: def __init__(self): self.data = [] def add(self, x): self.data.append(x) def addtwice(self,x): self.add(x) self.add(x)
  • 59. Feb 15, 2016 Advanced Another example, cont'd.  invoke: >>> from bag import * >>> l = Bag() >>> l.add('first') >>> l.add('second') >>> l.data ['first', 'second']
  • 60. Feb 15, 2016 Advanced Inheritance class DerivedClassName(BaseClassName) <statement-1> ... <statement-N>  search class attribute, descending chain of base classes  may override methods in the base class  call directly via BaseClassName.method
  • 61. Feb 15, 2016 Advanced Multiple inheritance class DerivedClass(Base1,Base2,Base3): <statement>  depth-first, left-to-right  problem: class derived from two classes with a common base class
  • 62. Feb 15, 2016 Advanced Private variables  No real support, but textual replacement (name mangling)  __var is replaced by _classname_var  prevents only accidental modification, not true protection
  • 63. Feb 15, 2016 Advanced ~ C structs  Empty class definition: class Employee: pass john = Employee() john.name = 'John Doe' john.dept = 'CS' john.salary = 1000
  • 64. Feb 15, 2016 Advanced Exceptions  syntax (parsing) errors while 1 print 'Hello World' File "<stdin>", line 1 while 1 print 'Hello World' ^ SyntaxError: invalid syntax  exceptions  run-time errors  e.g., ZeroDivisionError, NameError, TypeError
  • 65. Feb 15, 2016 Advanced Handling exceptions while 1: try: x = int(raw_input("Please enter a number: ")) break except ValueError: print "Not a valid number"  First, execute try clause  if no exception, skip except clause  if exception, skip rest of try clause and use except clause  if no matching exception, attempt outer try statement
  • 66. Feb 15, 2016 Advanced Handling exceptions  try.py import sys for arg in sys.argv[1:]: try: f = open(arg, 'r') except IOError: print 'cannot open', arg else: print arg, 'lines:', len(f.readlines()) f.close  e.g., as python try.py *.py
  • 67. Feb 15, 2016 Advanced Language comparison Tcl Perl Python JavaScript Visual Basic Speed development      regexp    breadth extensible    embeddable   easy GUI   (Tk)  net/web      enterprise cross-platform     I18N     thread-safe    database access     