Python - Basic and Intermediate Level Modules
Python - Basic and Intermediate Level Modules
2.0 Python Basics
IDLE will be installed, along with basic python in Windows. In Linux and Unix, it can be installed manually. IDLE
is a python IDE, from Python. Python commands can be executed using, either:
1. Interactive Mode, or
2. Script Mode
Individual commands can be executed in executed in interactive mode. Script mode is preferred for write a
program.
In script mode, >>> indicates the prompt of the python interpreter.
Programming in Python:
1. Interactive Mode Programming
Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:19:22) [MSC v.1500
32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
2. Script Mode Programming
$ python script.py
#!/usr/bin/python
print "Hello, World!"
$ chmod +x script.py
$ ./script.py
2.1 Basic Syntax and Indenting
In [1]: a = 12
In [2]: print a
12
In [3]: b = 34
In [4]: print "b = ", b
b = 34
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 1/338
13/11/2016 python Basic and Intermediate Level Modules
>>> a=12
File "<stdin>", line 1
a=12
^
IndentationError: unexpected indent
In [6]: for i in [1,2,335]:
print i
File "<ipython‐input‐6‐4fc7dc342d36>", line 2
print i
^
IndentationError: expected an indented block
In [5]: for i in [1,2,335]:
print i
1
2
335
In [8]: if True:
print "Something"
else:
print "Nothing"
File "<ipython‐input‐8‐e309279ca877>", line 4
print "Nothing"
^
IndentationError: expected an indented block
In [7]: if True:
print "Something"
else:
print "Nothing"
Something
So, ensure that indentation is provided whenever it is needed, and avoid undesired indendations. Python
Program works based on indentation.
PEP 8 is a python group for coding style. It recommends 4 spaces as indentation. Also, they recommend to
prefer spaces, to tabs. If any one is interested in using tabs, ensure that the tab space is configured to 4
spaces, in settings of your editor or IDE.
Also, there should be consistency of intendation, throughtout the program.
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 2/338
13/11/2016 python Basic and Intermediate Level Modules
2.2 Identifier Naming Conventions
Identifier can represent an object, including variables, classes, functions, execption, ...
For Identifiers, first character must be an alphabet (A to Z, a to z) or underscore
(_)
From second character onwards, it can be alpha‐numeric (A to Z, a to z, 0 to 9) and
underscore (_) character.
Ex: animal, _animal, animal123, ani123mal, ani_mal123, ani12ma_l3 are possible
Ex: 123animal, animal&, $animal, ani$mal, 0animal are not possible. (All these resu
lt in SyntaxError)
And, comma(,), dot(.), % operators are defined in python
Naming Conventions
‐ Class names start with an uppercase letter. All other identifiers start w
ith a lowercase letter.
‐ PRIVATE identifiers start with single underscore
ex: _identierName
‐ STRONGLY PRIVATE identifiers start with two leading underscores.
ex: __identifierName
‐ Language defined Special Names ‐ identifier with starts and ends with two
underscores
ex: __init__, __main__, __file__
Python is casesensitive language. This casesensitivity can be removed using advanced settings, but it is
strongly not recommended.
In [9]: animal = "Cat"
Animal = "Cow"
In [10]: print animal
Cat
In [11]: print Animal
Cow
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 3/338
13/11/2016 python Basic and Intermediate Level Modules
Identifier casing is of twotypes:
1. snake casing
ex: cost_of_mangos
2. Camel casing
ex: costOfMangos
PEP 8 recommends to follow any one of them, but, only one type of them in a project.
NOTE: In all the following exercises and examples, Camel casing will be followed.
Comment operator
# comment Operator
Interpretor ignore the line, right to this operator
The is only line comment, in python.
Docstrings
''' '''
""" """
In [13]: print '''
These are not multi‐line comments, but
are called docstrings.
docstrinsg will be processed by the interpreter.
triple double quotes will also work as docstrings.
'''
These are not multi‐line comments, but
are called docstrings.
docstrinsg will be processed by the interpreter.
triple double quotes will also work as docstrings.
In [14]: '''
These are not multi‐line comments, but
are called docstrings.
docstrinsg will be processed by the interpreter.
triple double quotes will also work as docstrings.
'''
Out[14]: '\n These are not multi‐line comments, but\n are called docstrings.\n
docstrinsg will be processed by the interpreter.\n triple double quotes
will also work as docstrings.\n'
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 4/338
13/11/2016 python Basic and Intermediate Level Modules
Quotes
‐ single ('apple' , "mango"), and triple quotes ('''apple''', """mango""")
‐ Triple quotes are generally used for docstrings
‐ Double quotes are NOT allowed. Don't be confused.
‐ quotes are used in defining strings
‐ words, sentences, paragraphs
MultiLine Statements
‐ \ Line continuation operator. (Also, used as reverse division operator)
In [15]: SomeOperation = 12+34‐ 1342342 + 23454545 + 3123 + \
3455 ‐ 3454 ‐ 3454 ‐ \
234
In [16]: print "SomeOperation = ", SomeOperation
sum = 22111685
Statements used within [], {}, or () doesn't need Line continuation operator
In [17]: months = ('Jan', 'Feb', 'Mar',
'Apr', 'May', 'Jun',
'jul', 'Aug')
In [18]: print months
('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'jul', 'Aug')
Mutiple Statements in a line
‐ ; operator is used to separate statements
In [1]: a = 12
b = 34
c = a + b
print "c = ", c
c = 46
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 5/338
13/11/2016 python Basic and Intermediate Level Modules
In [2]: a = 12; b = 34; c = a + b; print "c = ", c # there are 4 statements in th
is line
c = 46
2.3 Reserved Keywords in Python:
Reserved Keywords (27 in python 2.x)
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
and assert break class continue def
del
elif else except exec finally for
from
global if import in is lambda
not
or pass print raise return try
while
yield
Reserved Keywords (33 in python 3.x)
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
False class finally is return
None continue for lambda try
True def from nonlocal while
and del global not with
as elif if or yield
assert else import pass
break except in raise
These reserved keywords should not be used for the names of userdefined identifiers.
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 6/338
13/11/2016 python Basic and Intermediate Level Modules
Builtin Functions(64)
abs() divmod() input() open() staticmethod()
all() enumerate() int() ord() str()
any() eval() isinstance() pow() sum()
basestring() execfile() issubclass() print() super()
bin() file() iter() property() tuple()
bool() filter() len() range() type()
bytearray() float() list() raw_input() unichr()
callable() format() locals() reduce() unicode()
chr() frozenset() long() reload() vars()
classmethod() getattr() map() repr() xrange()
cmp() globals() max() reversed() zip()
compile() hasattr() memoryview() round() __import__()
complex() hash() min() set()
delattr() help() next() setattr()
dict() hex() object() slice()
dir() id() oct() sorted()
In [21]: a = 12
print type(a) # type() returns the type of the object.
<type 'int'>
In [22]: print type(type)
<type 'type'>
In [23]: print id(a) # returns the address where object 'a' is stored
40662740
In [24]: print(a) # print() function is different from print statement
12
In [25]: print(dir(a)) # returns the attributes and methods associated with the object
'a'
['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__', '__de
lattr__', '__div__', '__divmod__', '__doc__', '__float__', '__floordiv__', '_
_format__', '__getattribute__', '__getnewargs__', '__hash__', '__hex__', '__i
ndex__', '__init__', '__int__', '__invert__', '__long__', '__lshift__', '__mo
d__', '__mul__', '__neg__', '__new__', '__nonzero__', '__oct__', '__or__', '_
_pos__', '__pow__', '__radd__', '__rand__', '__rdiv__', '__rdivmod__', '__red
uce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod_
_', '__rmul__', '__ror__', '__rpow__', '__rrshift__', '__rshift__', '__rsub_
_', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__su
b__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_lengt
h', 'conjugate', 'denominator', 'imag', 'numerator', 'real']
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 7/338
13/11/2016 python Basic and Intermediate Level Modules
In [26]: help(a) # returns information and usage about the specified object, or funct
ion, ..
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 8/338
13/11/2016 python Basic and Intermediate Level Modules
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 9/338
13/11/2016 python Basic and Intermediate Level Modules
Help on int object:
class int(object)
| int(x=0) ‐> int or long
| int(x, base=10) ‐> int or long
|
| Convert a number or string to an integer, or return 0 if no arguments
| are given. If x is floating point, the conversion truncates towards zer
o.
| If x is outside the integer range, the function returns a long instead.
|
| If x is not a number or if base is given, then x must be a string or
| Unicode object representing an integer literal in the given base. The
| literal can be preceded by '+' or '‐' and be surrounded by whitespace.
| The base defaults to 10. Valid bases are 0 and 2‐36. Base 0 means to
| interpret the base from the string as an integer literal.
| >>> int('0b100', base=0)
| 4
|
| Methods defined here:
|
| __abs__(...)
| x.__abs__() <==> abs(x)
|
| __add__(...)
| x.__add__(y) <==> x+y
|
| __and__(...)
| x.__and__(y) <==> x&y
|
| __cmp__(...)
| x.__cmp__(y) <==> cmp(x,y)
|
| __coerce__(...)
| x.__coerce__(y) <==> coerce(x, y)
|
| __div__(...)
| x.__div__(y) <==> x/y
|
| __divmod__(...)
| x.__divmod__(y) <==> divmod(x, y)
|
| __float__(...)
| x.__float__() <==> float(x)
|
| __floordiv__(...)
| x.__floordiv__(y) <==> x//y
|
| __format__(...)
|
| __getattribute__(...)
| x.__getattribute__('name') <==> x.name
|
| __getnewargs__(...)
|
| __hash__(...)
| x.__hash__() <==> hash(x)
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 10/338
13/11/2016 python Basic and Intermediate Level Modules
|
| __hex__(...)
| x.__hex__() <==> hex(x)
|
| __index__(...)
| x[y:z] <==> x[y.__index__():z.__index__()]
|
| __int__(...)
| x.__int__() <==> int(x)
|
| __invert__(...)
| x.__invert__() <==> ~x
|
| __long__(...)
| x.__long__() <==> long(x)
|
| __lshift__(...)
| x.__lshift__(y) <==> x<<y
|
| __mod__(...)
| x.__mod__(y) <==> x%y
|
| __mul__(...)
| x.__mul__(y) <==> x*y
|
| __neg__(...)
| x.__neg__() <==> ‐x
|
| __nonzero__(...)
| x.__nonzero__() <==> x != 0
|
| __oct__(...)
| x.__oct__() <==> oct(x)
|
| __or__(...)
| x.__or__(y) <==> x|y
|
| __pos__(...)
| x.__pos__() <==> +x
|
| __pow__(...)
| x.__pow__(y[, z]) <==> pow(x, y[, z])
|
| __radd__(...)
| x.__radd__(y) <==> y+x
|
| __rand__(...)
| x.__rand__(y) <==> y&x
|
| __rdiv__(...)
| x.__rdiv__(y) <==> y/x
|
| __rdivmod__(...)
| x.__rdivmod__(y) <==> divmod(y, x)
|
| __repr__(...)
| x.__repr__() <==> repr(x)
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 11/338
13/11/2016 python Basic and Intermediate Level Modules
|
| __rfloordiv__(...)
| x.__rfloordiv__(y) <==> y//x
|
| __rlshift__(...)
| x.__rlshift__(y) <==> y<<x
|
| __rmod__(...)
| x.__rmod__(y) <==> y%x
|
| __rmul__(...)
| x.__rmul__(y) <==> y*x
|
| __ror__(...)
| x.__ror__(y) <==> y|x
|
| __rpow__(...)
| y.__rpow__(x[, z]) <==> pow(x, y[, z])
|
| __rrshift__(...)
| x.__rrshift__(y) <==> y>>x
|
| __rshift__(...)
| x.__rshift__(y) <==> x>>y
|
| __rsub__(...)
| x.__rsub__(y) <==> y‐x
|
| __rtruediv__(...)
| x.__rtruediv__(y) <==> y/x
|
| __rxor__(...)
| x.__rxor__(y) <==> y^x
|
| __str__(...)
| x.__str__() <==> str(x)
|
| __sub__(...)
| x.__sub__(y) <==> x‐y
|
| __truediv__(...)
| x.__truediv__(y) <==> x/y
|
| __trunc__(...)
| Truncating an Integral returns itself.
|
| __xor__(...)
| x.__xor__(y) <==> x^y
|
| bit_length(...)
| int.bit_length() ‐> int
|
| Number of bits necessary to represent self in binary.
| >>> bin(37)
| '0b100101'
| >>> (37).bit_length()
| 6
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 12/338
13/11/2016 python Basic and Intermediate Level Modules
|
| conjugate(...)
| Returns self, the complex conjugate of any int.
|
| ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
| Data descriptors defined here:
|
| denominator
| the denominator of a rational number in lowest terms
|
| imag
| the imaginary part of a complex number
|
| numerator
| the numerator of a rational number in lowest terms
|
| real
| the real part of a complex number
|
| ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
| Data and other attributes defined here:
|
| __new__ = <built‐in method __new__ of type object>
| T.__new__(S, ...) ‐> a new object with type S, a subtype of T
2.4 Arithmetic Operations
Arithmetic Operators:
+ ‐ * / \ % ** // =
PEP 8 recommends to place one space around the operator
In [27]: var1 = 123
var2 = 2345
Addition
In [28]: print var1+var2
2468
In [29]: var3 = 23.45
In [30]: print type(var1), type(var2), type(var3)
<type 'int'> <type 'int'> <type 'float'>
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 13/338
13/11/2016 python Basic and Intermediate Level Modules
In [31]: print var1+var3 # type‐casting takes place # int + float = float
146.45
In [35]: var4 = 453453454534545435345435345345345454357090970970707
In [36]: print var4
453453454534545435345435345345345454357090970970707
In [37]: var4 # observe the 'L' in the end
Out[37]: 453453454534545435345435345345345454357090970970707L
In [34]: print type(var4)
<type 'long'>
Assignment 1: what is the largest number that can be computed in python?
In [39]: print var2+var4 # int + long int
453453454534545435345435345345345454357090970973052
In [40]: print var3 + var4 # float + long int
4.53453454535e+50
In [41]: print var2
2345
In [42]: var2 = 234.456 # overwrite the existing object; dynamic typing
print var2
234.456
In [43]: print type(var2)
<type 'float'>
subtraction
In [44]: print var1 ‐ var2
‐111.456
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 14/338
13/11/2016 python Basic and Intermediate Level Modules
In [45]: print var2 ‐ var4
‐4.53453454535e+50
Assignment 2: what is the smallest number that can be computed in python?
Multiplication
In [46]: print var1*var2 # int * int
28838.088
In [47]: print var1*var2 # int * float
28838.088
In [49]: print var1, var2
123 234.456
In [50]: print var3, var4
23.45 453453454534545435345435345345345454357090970970707
In [51]: var5 = 23
In [52]: print var1*var5 # int * int
2829
In [53]: print var1 * var4 # int * long int
55774774907749088547488547477477490885922189429396961
Division Operation
Division is different in python 2.x and python 3.x
/ division operator
// floor division operator
\ reverse division (deprecated). It is no more used.
In [54]: 10/5
Out[54]: 2
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 15/338
13/11/2016 python Basic and Intermediate Level Modules
In [55]: 10/2
Out[55]: 5
In [56]: 10/3
Out[56]: 3
In [57]: 10//3
Out[57]: 3
In [58]: 10/3.0 # true division in python 2
Out[58]: 3.3333333333333335
In python3, 10/3 will give true division
In [60]: 2/10
Out[60]: 0
\ reverse division operator got deprecated
In [61]: 2\10
File "<ipython‐input‐61‐1bdd425914b1>", line 1
2\10
^
SyntaxError: unexpected character after line continuation character
In [62]: 10/3 # int/int = int
Out[62]: 3
In [63]: 10/3.0 # int/float = float
Out[63]: 3.3333333333333335
In [64]: 10.0/3 # float/int = float
Out[64]: 3.3333333333333335
In [65]: 10.0/3.0 # float/float = float
Out[65]: 3.3333333333333335
In [66]: float(3) # float() is a built‐in function, used to convert to floating‐point
value
Out[66]: 3.0
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 16/338
13/11/2016 python Basic and Intermediate Level Modules
In [67]: 10/float(3)
Out[67]: 3.3333333333333335
In [68]: 2/10
Out[68]: 0
In [69]: 2.0/10
Out[69]: 0.2
In [70]: 2.0//10
Out[70]: 0.0
In [71]: 5/2.0
Out[71]: 2.5
In [72]: 5//2.0
Out[72]: 2.0
In [74]: 5//2 #float division will convert to floor(), after division
Out[74]: 2
power operation
** power operator
pow() builtin function
In [75]: 2 ** 3
Out[75]: 8
In [76]: 3**100
Out[76]: 515377520732011331036461129765621272702107522001L
In [77]: pow(2,3)
Out[77]: 8
In [78]: pow(4,0.5) # square root
Out[78]: 2.0
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 17/338
13/11/2016 python Basic and Intermediate Level Modules
In [82]: pow(4,0.652)
Out[82]: 2.469125213787077
In [83]: 4**0.652
Out[83]: 2.469125213787077
In [79]: print var1, var2
123 234.456
In [80]: var1**var2
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
OverflowError Traceback (most recent call last)
<ipython‐input‐80‐e9b276a0d761> in <module>()
‐‐‐‐> 1 var1**var2
OverflowError: (34, 'Result too large')
In [81]: pow(var1, var2)
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
OverflowError Traceback (most recent call last)
<ipython‐input‐81‐4eb667228a30> in <module>()
‐‐‐‐> 1 pow(var1, var2)
OverflowError: (34, 'Result too large')
exponent operation
In [87]: 1e10
Out[87]: 10000000000.0
In [88]: 1e1 # equal to 1.0 * 10 **1
Out[88]: 10.0
In [89]: 1 * 10 **1
Out[89]: 10
In [90]: 1.0 * 10 **1
Out[90]: 10.0
Modulo Operations
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 18/338
13/11/2016 python Basic and Intermediate Level Modules
In [ ]: 0%3, 1%3, 2%3, 3%3, 4%3, 5%3, 6%3, 7%3, 8%3, 9%3, 10%3
Observe that there are 3 elements repeating (0, N1) where N is modulo divisor.
You can take the analogy of an Analog clock. After it completes 12 hours, it starts again from 0
In [94]: 0%12, 1%12, 11%12
Out[94]: (0, 1, 11)
In [95]: 12%12
Out[95]: 0
In [96]: 14%12 # 2 past noon
Out[96]: 2
In [97]: 16.45%12 # Observe the output precision
Out[97]: 4.449999999999999
In [105]: ‐18%12 # Observe the +ve sign in the result
Out[105]: 6
In [106]: ‐18%‐12
Out[106]: ‐6
In [107]: 18%‐12 # conclusion: sign of modulo number is reflected
Out[107]: ‐6
Complex Numbers
Complex Number = Real Number +/ Imaginary Number
In python, 'j' is used to represent the imaginary number.
In [108]: print 2+3j
(2+3j)
In [109]: n1 = 2+3j
In [110]: print type(n1)
<type 'complex'>
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 19/338
13/11/2016 python Basic and Intermediate Level Modules
In [111]: n2 = 3‐2j
print "n2 = ", n2, " type(n2) = ", type(n2)
n2 = (3‐2j) type(n2) = <type 'complex'>
In [112]: print n1, n1 + n2, n1‐n2
(2+3j) (5+1j) (‐1+5j)
In [113]: print n1*n1, pow(n1,2), n1/n1
(‐5+12j) (‐5+12j) (1+0j)
In [114]: print n1, n1.conjugate() # Observe the signs of imaginary numbers
(2+3j) (2‐3j)
In [115]: print n1, n1.real, n1.imag
(2+3j) 2.0 3.0
In [116]: n2 = 2.0‐3.45j
In [117]: print n2, n2.real, n2.imag
(2‐3.45j) 2.0 ‐3.45
In [118]: 4j
Out[118]: 4j
NOTE: 4j, j4, j4 are not possible. In these cases, interpreter treats 'j' as a variable.
In [119]: print n1+n2, n1‐n2, ‐n1+n2, ‐n1‐n2
(4‐0.45j) 6.45j ‐6.45j (‐4+0.45j)
In [120]: print n1*n2.real, (n1*n2).real
(4+6j) 14.35
In [121]: print n1, n2, n1.real+n2.imag # n2.imag is resulting in a real value
(2+3j) (2‐3.45j) ‐1.45
In [122]: complex(2,‐3.456) # complex() ‐ Builtin function
Out[122]: (2‐3.456j)
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 20/338
13/11/2016 python Basic and Intermediate Level Modules
.* (of Matlab) operator is not valid in python. Elementwise multiplication is possible with numpy module. floor
division is also not valid on complex type data.
In [123]: (3+4j) == (4j+3) # == checks value equivalence
Out[123]: True
In [124]: (3+4j) is (4j+3) # is ‐ checks object level (both value and address)
Out[124]: False
In [126]: print n1, abs(n1) # abs ‐ absolute function, Builtin function.
(2+3j) 3.60555127546
abs()
Builtin function, to return the absolute value
If a is positive real integer,
abs(a) = a
abs(‐a) = a
abs((a+bj)) is equal to math.sqrt(pow(a,2), pow(b,2))
In [128]: print abs(3)
3
In [129]: print abs(‐3)
3
In [130]: print abs(3+4j)
5.0
In [131]: import math
print math.sqrt(3**2+4**2)
5.0
In [132]: divmod(12+2j, 2‐3j) # divmod(x,y) returns x//y, x%y
c:\python27\lib\site‐packages\ipykernel\__main__.py:1: DeprecationWarning: co
mplex divmod(), // and % are deprecated
if __name__ == '__main__':
Out[132]: ((1+0j), (10+5j))
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 21/338
13/11/2016 python Basic and Intermediate Level Modules
Compound(mixed) Operations
+=, =, *=, **=
In [133]: a = 12
print a, type(a)
12 <type 'int'>
In [134]: a = a + 1 ; print "a = ", a # ; is used to write multiple statement in same
line
a = 13
In [135]: a += 1 ; print "a = ", a
a = 14
In [136]: a ‐= 1 ; print "a = ", a # a = a ‐1
a = 13
In [137]: a *= 2 ; print "a = ", a # a = a*2
a = 26
In [138]: a /= 2 ; print "a = ", a # a = a / 2
a = 13
In [139]: a **= 2 ; print "a = ", a # a = a ** 2
a = 169
In [140]: a %= 100 ; print "a = ", a
a = 69
In [141]: a = 23; a//=2; print "a = ", a
a = 11
In [142]: a<<=1; print "a = ", a #left‐shift
a = 22
at binary level 128 64 32 16 8 4 2 1
1 0 1 1
<<1 0 0 0 1 0 1 1 0
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 22/338
13/11/2016 python Basic and Intermediate Level Modules
In [144]: a>>=1; print "a = ", a #right‐shift
a = 11
In [145]: a^=2; print "a = ", a # bitwise XOR operation
a = 9
In [146]: a|=2; print "a = ", a # bitwise OR operation
a = 11
NOTE: Pre and Post increment/ decrements (++a, a++, a, a) are not valid in Python
Working in Script Mode
In [91]: #!/usr/bin/python
# This is called shebong line
# prog1.py
print "Hello World!"
Hello World!
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 23/338
13/11/2016 python Basic and Intermediate Level Modules
In [92]:
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 24/338
13/11/2016 python Basic and Intermediate Level Modules
#!/usr/bin/python
# prog2.py
# This hash/pound is the comment operator, used for
# both single line and multi‐line comments.
# comment line will be ignored by interpreter
'''
These are not multi‐line comments, but
are called docstrings.
docstrinsg will be processed by the interpreter.
triple double quotes will also work as docstrings.
'''
#either single, single or double quotes, can be used for strings
costOfMango = 12
print "cost Of Each Mango is ", costOfMango
costOfApple = 40
print "cost Of Each Apple is ", costOfApple
# what is the cost of dozen apples and two dozens of mangos
TotalCost = 12* costOfApple + 2*12* costOfMango
print "Total cost is ", TotalCost
# print is a statement in python 2, and is a function call in python 3
# now, python 2 is supporting both
print "Hello World!"
print("Hello World!")
# by default, print will lead to display in next line
print "This is", # , after print will suppress the next line
# but, a space will result
print "python class"
# PEP 8 recommends to use only print statement or function call throughtout th
e project
# ; semicolon operator
# It is used as a statement separator.
name = 'yash'
print 'My name is ', name
name = 'yash'; print 'My name is ', name
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 25/338
13/11/2016 python Basic and Intermediate Level Modules
print "who's name is ", name, '?'
print "'"
print '"'
print '\''
print "''' '''"
print '""'
print "''"
print ''' """ """ '''
print """ ''' ''' """
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 26/338
13/11/2016 python Basic and Intermediate Level Modules
cost Of Each Mango is 12
cost Of Each Apple is 40
Total cost is 768
Hello World!
Hello World!
This is python class
My name is yash
My name is yash
who's name is yash ?
'
"
'
''' '''
""
''
""" """
''' '''
In [93]: #!/usr/bin/python
# prog3.py
# Operator precedence in python
# It follows PEMDAS rule, and left to right, and top to bottom
# P ‐ Paranthesis
# E ‐ Exponent
# M ‐ Multiplication
# D ‐ Division
# A ‐ Addition
# S ‐ Subtraction
#Every type of braces has importance in python
# {} ‐ used for dictionaries and sets
# [] ‐ used for lists
# () ‐ used of tuples; also used in arithmetic operations
result = (22+ 2/2*4//4‐89)
print result
‐66
Assignment 3: examine the operator precedence will other examples
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 27/338
13/11/2016 python Basic and Intermediate Level Modules
IO Operations
In python 2.x, raw_input() and input() are two builtin functions used for getting runtime input.
raw_input() ‐ takes any type of runtime input as a string.
input() ‐ takes any type of runtime input originally without any type conversi
on.
NOTE: working with raw_input() requires us to use type converters to convert the da
ta into the required data type.
In Python 3.x, there is only input() function; but not raw_input(). The Job of raw_input() in python 2.x is done
by input() in python 3.x
In [1]: #!/usr/bin/python
# class3_io.py
'''
Purpose : demonstration of input() and raw_input()
'''
dataRI = raw_input('Enter Something: ')
dataI = input('Enter something: ')
print "dataRI = ", dataRI, " type(dataRI) = ", type(dataRI)
print "dataI = ", dataI, " type(dataI) = ", type(dataI)
Enter Something: 324
Enter something: 324
dataRI = 324 type(dataRI) = <type 'str'>
dataI = 324 type(dataI) = <type 'int'>
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 28/338
13/11/2016 python Basic and Intermediate Level Modules
Analyzed outputs for various demonstrated cases:
>>>
==================== RESTART: C:/pyExercises/class3_io.py ====================
Enter Something: 123
Enter something: 123
123 <type 'str'>
123 <type 'int'>
>>>
==================== RESTART: C:/pyExercises/class3_io.py ====================
Enter Something: 'Yash'
Enter something: 'Yash'
'Yash' <type 'str'>
Yash <type 'str'>
>>>
==================== RESTART: C:/pyExercises/class3_io.py ====================
Enter Something: True
Enter something: True
True <type 'str'>
True <type 'bool'>
>>>
==================== RESTART: C:/pyExercises/class3_io.py ====================
Enter Something: Yash
Enter something: Yash
Traceback (most recent call last):
File "C:/pyExercises/class3_io.py", line 12, in <module>
dataI = input('Enter something: ')
File "<string>", line 1, in <module>
NameError: name 'Yash' is not defined
>>> dataRI
'Yash'
input() takes only qualified data as runtime input. Whereas raw_input() will qualify any data as a 'str' type
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 29/338
13/11/2016 python Basic and Intermediate Level Modules
In [3]: #!/usr/bin/python
# class3_io1.py
'''
Purpose : demonstration of input() and raw_input()
'''
dataRI = int(raw_input('Enter a number: '))
dataI = input('Enter a number: ')
print "dataRI = ", dataRI, " type(dataRI) = ", type(dataRI)
print "dataI = ", dataI, " type(dataI) = ", type(dataI)
print "Sum of numbers is ", dataRI+dataI
Enter a number: 324
Enter a number: 324
dataRI = 324 type(dataRI) = <type 'int'>
dataI = 324 type(dataI) = <type 'int'>
Sum of numbers is 648
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 30/338
13/11/2016 python Basic and Intermediate Level Modules
Analyzed outputs for various demonstrated cases:
=================== RESTART: C:/pyExercises/class3_io1.py ===================
Enter a number: 123
Enter a number: 123
123 <type 'str'>
123 <type 'int'>
>>>
=================== RESTART: C:/pyExercises/class3_io1.py ===================
Enter a number: 123
Enter a number: 123
123 <type 'str'>
123 <type 'int'>
Sum of numbers is
Traceback (most recent call last):
File "C:/pyExercises/class3_io1.py", line 19, in <module>
print "Sum of numbers is ", dateRI+dataI
NameError: name 'dateRI' is not defined
>>>
=================== RESTART: C:/pyExercises/class3_io1.py ===================
Enter a number: 123
Enter a number: 123
123 <type 'str'>
123 <type 'int'>
Sum of numbers is
Traceback (most recent call last):
File "C:/pyExercises/class3_io1.py", line 19, in <module>
print "Sum of numbers is ", dataRI+dataI
TypeError: cannot concatenate 'str' and 'int' objects
>>>
=================== RESTART: C:/pyExercises/class3_io1.py ===================
Enter a number: 123
Enter a number: 123
123 <type 'int'>
123 <type 'int'>
Sum of numbers is 246
>>>
String Operations
string data type can be representing using either single or double quotes
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 31/338
13/11/2016 python Basic and Intermediate Level Modules
Creating a string
In [5]: s1 = 'Python Programming'
In [6]: s1
Out[6]: 'Python Programming'
In [7]: print s1
Python Programming
In [8]: print type(s1)
<type 'str'>
In [9]: s2 = "Django"
In [10]: print s2, type(s2)
Django <type 'str'>
In [11]: s3 = ''' python programming with Django '''
In [12]: print s3
python programming with Django
In [13]: print type(s3)
<type 'str'>
In [14]: s4 = """ python programming with Django """
In [15]: print s4
python programming with Django
In [16]: type(s4)
Out[16]: str
In [19]: print django1
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
NameError Traceback (most recent call last)
<ipython‐input‐19‐5701398af8ee> in <module>()
‐‐‐‐> 1 print django1
NameError: name 'django1' is not defined
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 32/338
13/11/2016 python Basic and Intermediate Level Modules
In [20]: print 'django1'
django1
In [21]: s5 = '~!@#$%^&*()1232425'
In [22]: print s5, type(s5)
~!@#$%^&*()1232425 <type 'str'>
In [23]: s6 = str(123.34) # str() is a builtin function to convert to string
In [24]: print s6, type(s6)
123.34 <type 'str'>
In [25]: s7 = str(True)
In [26]: print s7, type(s7)
True <type 'str'>
Indexing
In [27]: print s1
Python Programming
In [28]: print len(s1) # len() is a bultin function to return the length of object
18
P y t h o n P r o g r a m m i n g
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ‐> forward indexing
‐5 ‐4 ‐3 ‐2 ‐1 ‐> Reverse indexing
In [29]: s1[0]
Out[29]: 'P'
In [30]: s1[6] # white‐space character
Out[30]: ' '
In [31]: s1[17]
Out[31]: 'g'
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 33/338
13/11/2016 python Basic and Intermediate Level Modules
In [32]: s1[18]
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
IndexError Traceback (most recent call last)
<ipython‐input‐32‐8486803f392a> in <module>()
‐‐‐‐> 1 s1[18]
IndexError: string index out of range
NOTE:Indexing can be done from 0 through len(string)1
In [33]: s1[‐1]
Out[33]: 'g'
In [34]: s1[‐5]
Out[34]: 'm'
In [35]: s1[‐16]
Out[35]: 't'
In [36]: s1[‐18] == s1[0]
Out[36]: True
Interview Question 1: what is string[0]
In [37]: s1[‐0] # is equal to s1[0]
Out[37]: 'P'
String Slicing
In [39]: print s1
Python Programming
In [40]: s1[2:6]
Out[40]: 'thon'
In [41]: s1[2:8]
Out[41]: 'thon P'
In [42]: s1[:]
Out[42]: 'Python Programming'
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 34/338
13/11/2016 python Basic and Intermediate Level Modules
In [43]: s1[:‐1]
Out[43]: 'Python Programmin'
In [44]: s1[‐5:‐1]
Out[44]: 'mmin'
In [45]: s1[‐5:17] # complex indexing
Out[45]: 'mmin'
In [46]: s1[::‐1]
Out[46]: 'gnimmargorP nohtyP'
In [47]: s1[::1]
Out[47]: 'Python Programming'
In [48]: s1[::2]
Out[48]: 'Pto rgamn'
In [49]: s1[::3]
Out[49]: 'Ph oai'
In [50]: s1[::4]
Out[50]: 'Poran'
In [51]: s1[4:9]
Out[51]: 'on Pr'
In [52]: s1[4:9:1] # string[initialBound, finalBound, increment/decrement]
Out[52]: 'on Pr'
In [53]: s1[4:9:‐1] # 4‐1 = 3 index 3 is not represented in this object
Out[53]: ''
NOTE: After all these alterations, the original string object will not change, until it is overwrited.
Mutability of Strings
String objects are immutable. They, can't be edited. Only way is to overwrite it
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 35/338
13/11/2016 python Basic and Intermediate Level Modules
In [54]: print s1
Python Programming
In [55]: s1[3]
Out[55]: 'h'
In [56]: s1[3] = 'H'
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐56‐a32a26674f0e> in <module>()
‐‐‐‐> 1 s1[3] = 'H'
TypeError: 'str' object does not support item assignment
In [59]: s1 = "PyTHON PROGRAMMING" # object overwriting taken place
print s1
PyTHON PROGRAMMING
String attributes
In [61]: print dir(s1)
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__',
'__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt
__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex_
_', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str_
_', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser',
'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtab
s', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'i
sspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partitio
n', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip',
'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translat
e', 'upper', 'zfill']
In [62]: print s1
PyTHON PROGRAMMING
In [63]: print s1.capitalize()
Python programming
In [64]: s1.count('m')
Out[64]: 0
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 36/338
13/11/2016 python Basic and Intermediate Level Modules
In [65]: s1.count('M') # python is case‐ sensitive, and capitalize() created new obje
ct, without disturbing the original object
Out[65]: 2
In [66]: s1.endswith('ing') # endswith() returns the boolen result
Out[66]: False
In [67]: s1.endswith('ING')
Out[67]: True
In [68]: s1.startswith('Py')
Out[68]: True
In [69]: s1.find('P')
Out[69]: 0
In [70]: s1.find('THON')
Out[70]: 2
In [71]: s1.find('MM')
Out[71]: 13
In [72]: s1.find('M')
Out[72]: 13
In [73]: s1.index('THON')
Out[73]: 2
Interview Question: Difference between s1.find() and s1. index()? Also, 'rfind', 'rindex' attributes of string
objects
In [74]: s1
Out[74]: 'PyTHON PROGRAMMING'
In [75]: s1.capitalize()
Out[75]: 'Python programming'
In [76]: s1.lower()
Out[76]: 'python programming'
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 37/338
13/11/2016 python Basic and Intermediate Level Modules
In [77]: s1.upper()
Out[77]: 'PYTHON PROGRAMMING'
In [78]: s1.title()
Out[78]: 'Python Programming'
In [79]: s1.swapcase()
Out[79]: 'pYthon programming'
Interview Question : what is the data type of result of string.split()
In [80]: s1.split(' ')
Out[80]: ['PyTHON', 'PROGRAMMING']
In [81]: s1.split('O')
Out[81]: ['PyTH', 'N PR', 'GRAMMING']
In [82]: s1
Out[82]: 'PyTHON PROGRAMMING'
In [83]: s1.split('N') # string to list conversion
Out[83]: ['PyTHO', ' PROGRAMMI', 'G']
In [84]: s1.split('r') # no splitting as there is no 'r' character, but 'R' characte
r in string s1
Out[84]: ['PyTHON PROGRAMMING']
In [85]: s1.split('y')
Out[85]: ['P', 'THON PROGRAMMING']
In [86]: len(s1.split('y'))
Out[86]: 2
In [87]: ''.join(s1.split('y')) # list to strinsg conversion
Out[87]: 'PTHON PROGRAMMING'
In [88]: '@'.join(s1.split('y')) # delimiter can be placed
Out[88]: 'P@THON PROGRAMMING'
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 38/338
13/11/2016 python Basic and Intermediate Level Modules
In [89]: s1.split('O')
Out[89]: ['PyTH', 'N PR', 'GRAMMING']
In [90]: '@'.join(s1.split('O')) # Observe that 'O' is replaced by '@'. This is one
example of duck‐typing
Out[90]: 'PyTH@N PR@GRAMMING'
In [91]: s9 = '''
This is a good day!
Fall 7 times, raise 8!
This is a famous japanese quote.
'''
In [92]: print len(s9), s9
114
This is a good day!
Fall 7 times, raise 8!
This is a famous japanese quote.
In [93]: print 'IS'.join(s9.split('is'))
ThIS IS a good day!
Fall 7 times, raISe 8!
ThIS IS a famous japanese quote.
In [94]: s1
Out[94]: 'PyTHON PROGRAMMING'
In [95]: s1.isalpha()
Out[95]: False
In [96]: 'python'.isalpha()
Out[96]: True
In [97]: 'python programming'.isalpha() # As there is a space character also
Out[97]: False
In [98]: 'python'.isalnum()
Out[98]: True
In [99]: 'python123'.isalnum()
Out[99]: True
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 39/338
13/11/2016 python Basic and Intermediate Level Modules
In [100]: 'python123 '.isalnum() # There is a white space character also
Out[100]: False
In [101]: 'python123'.isdigit()
Out[101]: False
In [102]: '123'.isdigit()
Out[102]: True
In [103]: 'python'.islower()
Out[103]: True
In [104]: 'python123$'.islower() # It ensures that there is no capital letter, only
Out[104]: True
In [105]: 'python123$ '.isspace()
Out[105]: False
In [106]: ' '.isspace()
Out[106]: True
In [107]: ''.isspace()
Out[107]: False
In [108]: 'python programming'.isupper()
Out[108]: False
In [109]: 'PYTHON'.isupper()
Out[109]: True
In [110]: 'PyTHoN'.isupper()
Out[110]: False
In [111]: s1
Out[111]: 'PyTHON PROGRAMMING'
In [112]: s1.istitle()
Out[112]: False
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 40/338
13/11/2016 python Basic and Intermediate Level Modules
In [113]: (s1.title()).istitle()
Out[113]: True
In [114]: ' Python Programming '.rstrip()
Out[114]: ' Python Programming'
In [115]: ' Python Programming '.lstrip()
Out[115]: 'Python Programming '
In [116]: ' Python Programming '.strip() # removes whitespaces
Out[116]: 'Python Programming'
In [117]: ' Python Programming '.strip('ing')
Out[117]: ' Python Programming '
In [118]: ' Python Programming '.strip().strip('ing')
Out[118]: 'Python Programm'
In [119]: 'ad123da'.strip('a')
Out[119]: 'd123d'
In [120]: 'ad1a2a3ada'.strip('a') # middle characters will retain
Out[120]: 'd1a2a3ad'
In [121]: '01\t012\t0123\t01234'.expandtabs() # recognizes \t espace character
Out[121]: '01 012 0123 01234'
In [122]: '01012012301234'.expandtabs()
Out[122]: '01012012301234'
In [124]: #To get the website name, excluding the domain
'www.python.org'.lstrip('www.').rstrip('.org')
Out[124]: 'python'
In [125]: 'www.python.org'.split('.')[1] # alternatively
Out[125]: 'python'
In [126]: word = 'Python'
In [127]: len(word)
Out[127]: 6
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 41/338
13/11/2016 python Basic and Intermediate Level Modules
In [128]: word.zfill(6) # numbers less than len(word) doesn't show any affect
Out[128]: 'Python'
In [129]: word.zfill(7) # zeros will be prepended correspondingly
Out[129]: '0Python'
In [130]: word.zfill(len(word)+4)
Out[130]: '0000Python'
In [131]: '@'.join((word.zfill(len(word)+4).split('0'))) # filling with character '@'
Out[131]: '@@@@Python'
In [132]: 'Python\tProgramming\t'.expandtabs() # recognizes '\t', '\r' and '\r\t'; and
expands correspondingly whenever it finds '\t'
Out[132]: 'Python Programming '
In [133]: r'Python\tProgramming'.expandtabs()
Out[133]: 'Python\\tProgramming'
In [134]: 'Python\r\tProgramming'.expandtabs()
Out[134]: 'Python\r Programming'
In [135]: print 'Python\r\tProgramming'.expandtabs()
Programming
In [136]: 'Python\t\rProgramming'.expandtabs()
Out[136]: 'Python \rProgramming'
In [137]: print 'Python\t\rProgramming'.expandtabs()
Programming
In [138]: "python programming".partition(' ')
Out[138]: ('python', ' ', 'programming')
In [139]: "python programming".partition('o')
Out[139]: ('pyth', 'o', 'n programming')
In [140]: "python programming".partition('0') # 0 is not present
Out[140]: ('python programming', '', '')
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 42/338
13/11/2016 python Basic and Intermediate Level Modules
In [141]: "python programming".partition('n')
Out[141]: ('pytho', 'n', ' programming')
In [142]: "python programming".rpartition('n')
Out[142]: ('python programmi', 'n', 'g')
In [143]: "python programming".partition('g')
Out[143]: ('python pro', 'g', 'ramming')
In [144]: "python programming".rpartition('n')
Out[144]: ('python programmi', 'n', 'g')
In [145]: "python programming language".partition('a') # observe 3 'a' characters
Out[145]: ('python progr', 'a', 'mming language')
In [146]: "python programming language".rpartition('a') # middle 'a' isn't preferred
Out[146]: ('python programming langu', 'a', 'ge')
Assignment : Try to practice the remaining attributes, in this order.
split splitlines rsplit
find rfind
index rindex
center ljust rjust
encode decode translate
2.7 String Operations
2.7.6 String Attributes
In [1]: myString = 'fall 7 times stand up 8!'
In [2]: len(myString)
Out[2]: 24
In [3]: myString.center(len(myString)+1)
Out[3]: ' fall 7 times stand up 8!'
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 43/338
13/11/2016 python Basic and Intermediate Level Modules
In [4]: myString.center(len(myString)+2)
Out[4]: ' fall 7 times stand up 8! '
In [5]: myString.center(len(myString)+5)
Out[5]: ' fall 7 times stand up 8! '
In [6]: myString.ljust(len(myString)+5)
Out[6]: 'fall 7 times stand up 8! '
In [7]: myString.rjust(len(myString)+5)
Out[7]: ' fall 7 times stand up 8!'
In [8]: myString.ljust(len(myString)+5).rjust(len(myString)+5)
Out[8]: 'fall 7 times stand up 8! '
In [9]: myParagraph = "fall 7 times stand up 8!\nfall 7 times stand up 8!\nfall 7 time
s stand up 8!"
In [10]: print myParagraph
fall 7 times stand up 8!
fall 7 times stand up 8!
fall 7 times stand up 8!
In [11]: myParagraph.splitlines()
Out[11]: ['fall 7 times stand up 8!',
'fall 7 times stand up 8!',
'fall 7 times stand up 8!']
In [12]: myParagraph.splitlines(2) # results in two \n 's
Out[12]: ['fall 7 times stand up 8!\n',
'fall 7 times stand up 8!\n',
'fall 7 times stand up 8!']
In [13]: myString.encode('base64')
Out[13]: 'ZmFsbCA3IHRpbWVzIHN0YW5kIHVwIDgh\n'
In [14]: 'ZmFsbCA3IHRpbWVzIHN0YW5kIHVwIDgh\n'.decode('base64')
Out[14]: 'fall 7 times stand up 8!'
In [15]: myString.encode('base64', 'strict') # 'strict' option results in raising Uni
codeError, for encoding errors
Out[15]: 'ZmFsbCA3IHRpbWVzIHN0YW5kIHVwIDgh\n'
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 44/338
13/11/2016 python Basic and Intermediate Level Modules
In [16]: myString.encode('utf_8', 'strict')
Out[16]: 'fall 7 times stand up 8!'
In [17]: unicode('fall 7 times stand up 8!')
Out[17]: u'fall 7 times stand up 8!'
In [18]: type('fall 7 times stand up 8!'), type(unicode('fall 7 times stand up 8!'))
Out[18]: (str, unicode)
Interview Question : what is the difference betweem str.find() and in operator
In [19]: "c" in "abc" # in ‐ Membership check operator; returns the boolean(True/Fals
e)
Out[19]: True
In [20]: "abc".find("c")
Out[20]: 2
In [21]: "abc".find("d")
Out[21]: ‐1
In [22]: "d" in "abc"
Out[22]: False
In [23]: "d" not in "abc"
Out[23]: True
2.7.8 String Concatenation
In [24]: myString
Out[24]: 'fall 7 times stand up 8!'
In [25]: myNewString = "It's time to wake up!!"
In [26]: myString + myNewString
Out[26]: "fall 7 times stand up 8!It's time to wake up!!"
In [27]: ''.join([myString, myNewString])
Out[27]: "fall 7 times stand up 8!It's time to wake up!!"
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 45/338
13/11/2016 python Basic and Intermediate Level Modules
In [28]: myString + "@@@" +myNewString
Out[28]: "fall 7 times stand up 8!@@@It's time to wake up!!"
In [29]: '@@@'.join([myString, myNewString])
Out[29]: "fall 7 times stand up 8!@@@It's time to wake up!!"
In [30]: myString + 1947
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐30‐5a193782e9b7> in <module>()
‐‐‐‐> 1 myString + 1947
TypeError: cannot concatenate 'str' and 'int' objects
In [31]: myString + str(1947)
Out[31]: 'fall 7 times stand up 8!1947'
In [32]: str(True) + myString
Out[32]: 'Truefall 7 times stand up 8!'
In [33]: result = myString + str(True)+ str(' ')+ str(123.45)+ str(' ~!@#$%^&*')
print type(result), result
<type 'str'> fall 7 times stand up 8!True 123.45 ~!@#$%^&*
2.7.9 String Formating
Accessing Arguments by position
In [34]: '{}, {} and {}'.format('a', 'b', 'c')
Out[34]: 'a, b and c'
In [35]: '{}, {} and {}'.format('b', 'b', 'c')
Out[35]: 'b, b and c'
In [36]: '{0}, {1} and {2}'.format('a', 'b', 'c')
Out[36]: 'a, b and c'
In [37]: '{0}, {2} and {2}'.format('a', 'b', 'c')
Out[37]: 'a, c and c'
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 46/338
13/11/2016 python Basic and Intermediate Level Modules
In [38]: str1 = 'Naseer'
str2 = 'Shoban'
str3 = 'Shankar'
print "The class is organized by {0}, and attended by {1} and
{2}".format(str1, str2, str3)
The class is organized by Naseer, and attended by Shoban and Shankar
In [39]: print "The class is organized by {2}, and attended by {0} and
{1}".format(str1, str2, str3)
The class is organized by Shankar, and attended by Naseer and Shoban
In [40]: '{2}, {1}, {0}'.format(*'abc') # Tuple unpacking
Out[40]: 'c, b, a'
In [41]: '{0}, {1}, {2}'.format(*'abc')
Out[41]: 'a, b, c'
accessing arguments by name
In [42]: 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='‐1
15.81W')
Out[42]: 'Coordinates: 37.24N, ‐115.81W'
In [43]: print "The class is organized by {organizer}, and attended by {std1} and {std
2}".format(organizer = str3, std2 = str2, std1 = str1)
The class is organized by Shankar, and attended by Naseer and Shoban
2.7.10 str() vs repr() | %s vs %r
Interview Question : what is the difference between str() and repr() ?
In [44]: str9 = "C:\newFolder"
In [45]: print str9
C:
ewFolder
In [46]: str10 = "C:\\newFolder" # to escape the \ character
In [47]: print str10
C:\newFolder
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 47/338
13/11/2016 python Basic and Intermediate Level Modules
In [48]: str11 = r"C:\newFolder" #raw string representation
In [49]: print str11
C:\newFolder
In [50]: type(str9), type(str10), type(str11)
Out[50]: (str, str, str)
repr() is representational, but results in string data type.
Interview Question : In which cases, repr() is preferred to str()?
str() is comfortable for Humans; whereas repr() is for the machine
In [51]: "repr() shows quotes: {!r}; str() doesn't : {!s}".format('Shoban', 'Shoban')
Out[51]: "repr() shows quotes: 'Shoban'; str() doesn't : Shoban"
In [52]: str("udhay")
Out[52]: 'udhay'
In [53]: repr("udhay")
Out[53]: "'udhay'"
In [54]: str('udhay')
Out[54]: 'udhay'
In [55]: repr('udhay')
Out[55]: "'udhay'"
In [56]: print str("udhay"), repr("udhay"), str('udhay'), repr('udhay')
udhay 'udhay' udhay 'udhay'
In [57]: name = repr("Udhay")
print "My name is ", name
My name is 'Udhay'
aligning the text and specifying a width
In [58]: '{:<30}'.format('Python Programming') # ljust
Out[58]: 'Python Programming '
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 48/338
13/11/2016 python Basic and Intermediate Level Modules
In [59]: print '{:<30}'.format('Python Programming') # ljust
Python Programming
In [60]: '{:>30}'.format('Python Programming') # rjust
Out[60]: ' Python Programming'
In [61]: '{:^30}'.format('Python Programming') # center
Out[61]: ' Python Programming '
Assignment: Create a raw template for the supermarket bill, with corresponding data types. Use string
formatting to display the final bill. Hint: extend previous supermarket logic.
2.8 Logical Operations
In [63]: a = 12;
In [64]: a > 9
Out[64]: True
In [65]: a < 14
Out[65]: True
In [66]: a == 34
Out[66]: False
In [67]: a != 23
Out[67]: True
In [68]: a <> 23 # <> is also used as != ; used only in python 2.x
Out[68]: True
In [69]: (a > 9) and (a < 34)
Out[69]: True
In [70]: (a>9) and (a>34)
Out[70]: False
In [71]: (a > 9) or (a > 34)
Out[71]: True
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 49/338
13/11/2016 python Basic and Intermediate Level Modules
In [72]: (a < 9) or (a > 34)
Out[72]: False
In [73]: not ((a<9) or (a>34))
Out[73]: True
In [74]: (a<9), not (a<9)
Out[74]: (False, True)
2.9 Bitwise operations
In [75]: 4 << 1 # bitwise left‐shift ‐ shifts their corresponding binary digits l
eft side by one position. # binary notation 8421
Out[75]: 8
In [76]: 4>>1 # bitwise right‐shift
Out[76]: 2
In [77]: 4 & 8 # bitwise AND # 4 ‐ 0100 8 ‐ 1000
Out[77]: 0
In [78]: 4 & 12
Out[78]: 4
In [79]: 4 | 8 # bitwise OR
Out[79]: 12
In [80]: 4, ~4 # bitwise not ‐ Gives the 1's complement value
Out[80]: (4, ‐5)
2.10 Identity Operations
is, is not
In [81]: 4 is 4 # is ‐ does object level (value, type, address)identity check
Out[81]: True
In [82]: a = 12
b = 234
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 50/338
13/11/2016 python Basic and Intermediate Level Modules
In [83]: a is b
Out[83]: False
In [84]: b = 12
In [85]: a is b
Out[85]: True
In [87]: a not is b
File "<ipython‐input‐87‐d94cceae31d8>", line 1
a not is b
^
SyntaxError: invalid syntax
In [86]: a is not b
Out[86]: False
Interview Question : why 'is' operator results in False for two objects with same value above 257, and True
for values less than or equal to 256?
In [88]: a = 257
b = 257
In [89]: a is b
Out[89]: False
In [90]: id(a), id(b) # Observe the addressed of these objects
Out[90]: (42037752, 42037728)
In [91]: a = 256
b = 256
In [92]: a is b
Out[92]: True
In [93]: id(a), id(b) # 1 byte ‐ 256
Out[93]: (38896092, 38896092)
Assignment : Try this with float values, and try to find the boundary?
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 51/338
13/11/2016 python Basic and Intermediate Level Modules
2.10 Boolean Operations
True, False
In [94]: True
Out[94]: True
In [95]: False
Out[95]: False
In [96]: true
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
NameError Traceback (most recent call last)
<ipython‐input‐96‐74d9a83219ca> in <module>()
‐‐‐‐> 1 true
NameError: name 'true' is not defined
In [97]: not True
Out[97]: False
In [98]: True is True
Out[98]: True
In [99]: print True is False
False
In [100]: False is True
Out[100]: False
In [101]: False is False
Out[101]: True
In [102]: False is not True
Out[102]: True
In [103]: True is not False
Out[103]: True
In [104]: True *3 # Value for 'True' boolean object is 1
Out[104]: 3
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 52/338
13/11/2016 python Basic and Intermediate Level Modules
In [105]: False * 9 # Value for 'False' boolean object is 0
Out[105]: 0
In [106]: True == 1
Out[106]: True
In [107]: True is 1
Out[107]: False
In [108]: id(True), id(1)
Out[108]: (498410564, 38893200)
In [109]: True is not 1
Out[109]: True
In [110]: 0 == False
Out[110]: True
In [111]: 0 is False
Out[111]: False
In [112]: bool(23 > 45) # bool() ‐ builtin function; results in boolean value
Out[112]: False
In [113]: bool('') # empty or null elements result in False
Out[113]: False
In [114]: bool('python')
Out[114]: True
In [115]: bool(0), bool(1), bool(23420), bool(‐3424)
Out[115]: (False, True, True, True)
In [116]: bool([]), bool({}), bool(())
Out[116]: (False, False, False)
In [117]: bool([12]), bool({12}), bool((12))
Out[117]: (True, True, True)
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 53/338
13/11/2016 python Basic and Intermediate Level Modules
In [118]: bool([2,3]), bool({23, 34}), bool((122, 345))
Out[118]: (True, True, True)
In [119]: bool(True), bool(False), bool(not False)
Out[119]: (True, False, True)
2.10 Order of evaluation
operators descriptions
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
(), [], {}, ‘’ tuple, list, dictionnary, string
x.attr, x[], x[i:j], f() attribute, index, slide, function call
+x, ‐x, ~x unary negation, bitwise invert
** exponent
*, /, % multiplication, division, modulo
+, ‐ addition, substraction
<<, >> bitwise shifts
& bitwise and
^ bitwise xor
| bitwise or
<, <=, >=, >,==, != comparison operators
is, is not, in,not in comparison operators (continue)
not boolean NOT
and boolean AND
or boolean OR
lambda lambda expression
Assignment 3 : Try few arithmetic expressions and Observe that the Order of precedence is followed.
2.11 Conditional Operations
PEP 8 recommends 4 spaces for indentation
In [120]: if True:
print "By Default, It will be True"
By Default, It will be True
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 54/338
13/11/2016 python Basic and Intermediate Level Modules
In [121]: if True:
print "By Default, It will be True"
else:
print "Unless given as False, It isn't choosen"
By Default, It will be True
In [122]: if 34 < 56:
print '34<56'
34<56
In [123]: if 1:
print 'It is true'
else:
print 'It is false'
It is true
In [124]: if ‐67:
print 'It is true'
else:
print 'It is false'
It is true
In [125]: a = False
if a == True:
print 'It is true'
else:
print 'It is false'
It is false
In [126]: if a: # equivalent to a == True
print 'It is true'
else:
print 'It is false'
It is false
In [127]: if not a:
print 'It is true'
else:
print 'It is false'
It is true
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 55/338
13/11/2016 python Basic and Intermediate Level Modules
In [128]: a = ‐23
if a:
print 'It is not zero'
else:
print 'It is zero'
It is not zero
2.11 range() and xrange()
In [129]: range(9)
Out[129]: [0, 1, 2, 3, 4, 5, 6, 7, 8]
In [130]: var = range(9)
print type(var), var
<type 'list'> [0, 1, 2, 3, 4, 5, 6, 7, 8]
In [131]: range(0,9)
Out[131]: [0, 1, 2, 3, 4, 5, 6, 7, 8]
In [132]: range(0,9,1) # range(initialValue, FinalBound, Step)
Out[132]: [0, 1, 2, 3, 4, 5, 6, 7, 8]
range(initialValue, FinalBound, Step)
defaults:
initialValue = 0th value
FinalBound = last value in list/string
step = +1
In [133]: range(‐1)
Out[133]: []
In [134]: range(0,9,1)
Out[134]: [0, 1, 2, 3, 4, 5, 6, 7, 8]
In [135]: range(0,9,2)
Out[135]: [0, 2, 4, 6, 8]
In [136]: range(0,9,‐2) # 0‐2 = ‐2 , which is out of bounds of [0‐9]
Out[136]: []
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 56/338
13/11/2016 python Basic and Intermediate Level Modules
In [137]: range(9,0,‐2)
Out[137]: [9, 7, 5, 3, 1]
In [138]: range(9.5,0.5,‐0.5)
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐138‐08513d47a46c> in <module>()
‐‐‐‐> 1 range(9.5,0.5,‐0.5)
TypeError: range() integer end argument expected, got float.
In [139]: print range(‐44, ‐4, 4)
[‐44, ‐40, ‐36, ‐32, ‐28, ‐24, ‐20, ‐16, ‐12, ‐8]
In [140]: print range(‐4, ‐44, ‐4)
[‐4, ‐8, ‐12, ‐16, ‐20, ‐24, ‐28, ‐32, ‐36, ‐40]
In [141]: range(9,‐1) # Here, finalBoundValue = ‐1; step = +1
Out[141]: []
In [142]: range(9,1) # Here, finalBoundValue = 1; step = +1
Out[142]: []
Interview Question : What is the difference between range() and xrange()?
range() will result in a list data type. It will store the resulting data in the buffer. For larger values, it will cost
more buffer (heap) memory to store all those values. It is memory inefficient.
In [143]: print range(34)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 2
1, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33]
In [144]: print xrange(34)
xrange(34)
In [145]: for i in range(34):
print i, # , is a newline suppressor
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
29 30 31 32 33
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 57/338
13/11/2016 python Basic and Intermediate Level Modules
In [146]: for i in xrange(34):
print i,
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
29 30 31 32 33
NOTE: When iterating, both xrange() and range() will result the same end output.
In [148]: #!/usr/bin/python
# lotteryTicketGame.py
ticketNumber = raw_input("Enter the ticket Number")
lotteryNumber = "12AE8Jy4"
if ticketNumber == lotteryNumber:
print "YOU ARE THE WINNER"
else:
print "Sorry! But, Try again. You may win very next moment"
Enter the ticket NumberY023H56HAT
Sorry! But, Try again. You may win very next moment
Assignment : create a lottery ticket game, which takes only numbers; then prompt whether the given ticket
number is greater, lesser or equal to the lotter ticket number.
3.1 for Loop
General sematic for for loop in any language
for (initialization, condition, increment/decrement)
logic
syntax in Python:
for indexingVaraible1, indexingVariable2,.. in (iterator1, iterator2,..):
logic
In [149]: for i in [1,2,3,5]: # here, initialization is 1,
print i
1
2
3
5
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 58/338
13/11/2016 python Basic and Intermediate Level Modules
In [150]: for i in range(2, 10, 2): # initialization is 2, increment = 2, finalValue
= 10
print i, # , operator works as newline suppresser, here
2 4 6 8
In [151]: for i in range(6): # initialization = 0, increment = 1; finalValue = 6
print i,
0 1 2 3 4 5
In [152]: for i in 'Python':
print i,
P y t h o n
In [153]: words = ['Python', 'Programming', 'Django', 'NEtworking']
for i in words:
print i,
Python Programming Django NEtworking
In Python, Pass, Continue and break are used to loops.
Though continue and break are similar to that of other traditional programming languages, pass is a unique
feature available in python.
break Terminates the loop, after its invocation.
continue Skips the current loop, and continues perform the next consecutive loops.
pass Does nothing. No logic to work. No break nor skipping a loop. pass is placed when there is no logic to
be written for that condition, within the loop. It is advantageous for the developers for writing the logic in future.
In [154]: for i in words:
if i == 'Python':
continue
print i
Programming
Django
NEtworking
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 59/338
13/11/2016 python Basic and Intermediate Level Modules
In [155]: #!/usr/bin/python
#class5_passContinueBreakSysExit.py
print "\nExample to illustrate CONTINUE "
for j in range(10):
if j==5:
continue
print j,
print "\nExample to illustrate BREAK "
for p in range(10):
if p==5:
break
print p,
print "\nExample to illustrate PASS "
for i in range(10):
if i==5:
pass # its like TODO
print i,
Example to illustrate CONTINUE
0 1 2 3 4 6 7 8 9
Example to illustrate BREAK
0 1 2 3 4
Example to illustrate PASS
0 1 2 3 4 5 6 7 8 9
pass It acts like a TODO during development. Generally, pass is used when logic will be written in future.
3.2 while loop
Syntax in python
initialization
while condition
logic
increment/decrement
Prefer while loop, only when the exit condition known; else it might lead to infinite loop.
In [156]: a = 0 # initialization
while a<20: # condition
print a, # logic statement
a+=1 # increment
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 60/338
13/11/2016 python Basic and Intermediate Level Modules
In [157]: b = 34
while b>0:
print b,
b‐=1
34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9
8 7 6 5 4 3 2 1
In [158]: # Fibonacci Series: 0,1,1,2,3,5,8,13,...
a,b = 0,1 # Tuple unpacking
while b < 100: # to print fibonacci numbers less than 100
print b,
a,b = b, a+b
1 1 2 3 5 8 13 21 34 55 89
In [159]: a,b = 0,1 # Tuple unpacking
count = 0 # initializing new variable
while b < 100: # to print fibonacci numbers less than 100
print b,
a,b = b, a+b
count+=1 # newVariables can't be used in loops, as new variable gets cre
ated everytime
1 1 2 3 5 8 13 21 34 55 89
In [160]: count
Out[160]: 11
In [161]: a,b = 0,1 # Tuple unpacking
count = 0 # initializing new variable
while b < 100: # to print fibonacci numbers less than 100
print b,
a,b = b, a+b
count+=1 # newVariables can't be used in loops, as new variable gets cre
ated everytime
print "\nIn total, there are %d fibonacci numbers"%(count)
1 1 2 3 5 8 13 21 34 55 89
In total, there are 11 fibonacci numbers
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 61/338
13/11/2016 python Basic and Intermediate Level Modules
In [162]:
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 62/338
13/11/2016 python Basic and Intermediate Level Modules
#!/usr/bin/python
#class5_whileFor.py
print "\nExample to illustrate CONTINUE "
print "with while loop"
j = 0
while j<10:
if j == 5:
j+=1 # comment this line and observe the difference
continue
print j,
j+=1
print "\nwith for loop"
for j in range(10):
if j==5:
continue
print j,
print "\nExample to illustrate BREAK "
print "with while loop"
p = 0
while p<10:
if p == 5:
break
print p,
p+=1
print "\nwith for loop"
for p in range(10):
if p==5:
break
print p,
print "\nExample to illustrate PASS "
print "with while loop"
i = 0
while i<10:
if i == 5:
pass
print i,
i+=1
print "\nwith for loop"
for i in range(10):
if i==5:
pass # its like TODO
print i,
print "\nExample to illustrate sys.exit "
import sys
print "with while loop"
i = 0
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 63/338
13/11/2016 python Basic and Intermediate Level Modules
while i<10:
if i == 5:
sys.exit(0) # exit code 0 ‐ everything is correct. 1‐ some error
print i,
i+=1
print "\nwith for loop"
for i in range(10):
if i==5:
sys.exit(1)
print i,
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 64/338
13/11/2016 python Basic and Intermediate Level Modules
Example to illustrate CONTINUE
with while loop
0 1 2 3 4 6 7 8 9
with for loop
0 1 2 3 4 6 7 8 9
Example to illustrate BREAK
with while loop
0 1 2 3 4
with for loop
0 1 2 3 4
Example to illustrate PASS
with while loop
0 1 2 3 4 5 6 7 8 9
with for loop
0 1 2 3 4 5 6 7 8 9
Example to illustrate sys.exit
with while loop
0 1 2 3 4
An exception has occurred, use %tb to see the full traceback.
SystemExit: 0
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
c:\python27\lib\site‐packages\IPython\core\interactiveshell.pyc in run_code(s
elf, code_obj, result)
2875 result.error_in_exec = e
2876 self.showtraceback(exception_only=True)
‐> 2877 warn("To exit: use 'exit', 'quit', or Ctrl‐D.", level=1)
2878 except self.custom_exceptions:
2879 etype, value, tb = sys.exc_info()
TypeError: 'level' is an invalid keyword argument for this function
NOTE: Observe that sys.exit() will exit the program execution. Also, observe that last for loop wasn't executed.
In [163]: # Generating the POWER Series:
# e**x =1+x+x**2/2! +x**3/3! +....+ x**n/n! where 0 < x < 1
# class5_powerSeries.py
#!/usr/bin/python
x = float(input("Enter the value of x: "))
n = term = num = 1 # multiple Assigment
sum = 1.0
while n <= 100:
term *= x / n
sum += term
n += 1
if term < 0.0001:
break
print("No of Times= %d and Sum= %f" % (n, sum)) # print function
Enter the value of x: 3
No of Times= 15 and Sum= 20.085523
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 65/338
13/11/2016 python Basic and Intermediate Level Modules
In [164]: #!/usr/bin/python
# class5_multiplicationTable.py
# Write a Script to print the multiplication table up to 10
maxLimit = 14
i = 1
print "‐"*20
while i<maxLimit:
n =1
while n<maxLimit:
print '%2d * %2d = %3d'%(i,n,i*n),
#print '%3d'%(i*n),
n+=1
print '|'
i+=1
print "‐"*20
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
1 * 1 = 1 |
2 * 2 = 4 |
3 * 3 = 9 |
4 * 4 = 16 |
5 * 5 = 25 |
6 * 6 = 36 |
7 * 7 = 49 |
8 * 8 = 64 |
9 * 9 = 81 |
10 * 10 = 100 |
11 * 11 = 121 |
12 * 12 = 144 |
13 * 13 = 169 |
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 66/338
13/11/2016 python Basic and Intermediate Level Modules
Assignment : Run the below class5_multiplicationTables2.py, with the various commented options, in the
script. Observe the differences.
#!/usr/bin/python
# ‐*‐ coding: utf‐8 ‐*‐
# class5_multiplicationTables2.py
'''
Purpose:
To print the multiplications tables upto 10
'''
maxLimit = 10
#maxLimit = int(raw_input('Enter the maximum table to display :'))
print '‐'*50
i=1
while i<maxLimit+1:
j =1
while j< maxLimit+1:
#print "i = ", i,"j = " , j, "i*j = ", i*j
#print i, '*', j, '=', i*j
#print "%d * %d = %d "%(i,j,i*j)
print '%2d * %2d = %3d'%(i,j, i*j)#,
j+=1
#print i
print '‐'*25
i+=1
print '‐'*50
Assignment : Based on class5_multiplicationTables2.py, write a program to display the multiplication tables
from 1 through 10, horizontally
ex:
1 * 1 = 1 | 2 * 1 = 2 | 3 * 1 = 3 | ....
1 * 2 = 2 | 2 * 2 = 4 | 3 * 2 = 6 | ....
...
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 67/338
13/11/2016 python Basic and Intermediate Level Modules
In [165]: #!/usr/bin/python
# class5_halfDiamond.py
# To display the astrickes in a half‐diamond pattern
size = 10
j=0
#print 'j=',j
while j<size:
print '*'*j
j+=1
#print 'j=',j
while j>0:
print '*'*j
j‐=1
#print 'j=',j
# implementation with for loop
for j in range(size):
print '*'*j
for j in range(size,0, ‐1):
print '*'*j
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 68/338
13/11/2016 python Basic and Intermediate Level Modules
*
**
***
****
*****
******
*******
********
*********
**********
*********
********
*******
******
*****
****
***
**
*
*
**
***
****
*****
******
*******
********
*********
**********
*********
********
*******
******
*****
****
***
**
*
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 69/338
13/11/2016 python Basic and Intermediate Level Modules
In [166]: #!/usr/bin/python
# class5_quaterdiamond.py
# Printing a quarter diamond
row = int(input("Enter the number of rows: "))
n = row
while n >= 0:
x = "*" * n
y = " " * (row ‐ n)
print(y + x)
n ‐= 1
print 'row = %d'%(row)
print 'n = %d'%(n)
n = row
while n >= 0:
x = "*" * n
y = " " * (row ‐ n)
print(x+y)
n ‐= 1
Enter the number of rows: 5
*****
****
***
**
*
row = 5
n = ‐1
*****
****
***
**
*
Assignment : Write a program to display a full diamond shape, separetely using for loop, and using while
loop?
4 Collections
Lists
Tuples
named Tuples
Dictionaries
sets
Comprehensions
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 70/338
13/11/2016 python Basic and Intermediate Level Modules
4.1 Lists
List can be classified as singledimensional and multidimensional.
List is representing using []
List is a mutable object, which means elements in list can be changed.
It can store asymmetric data types.
In [167]: list1 = [12, 23, 34, 56, 67, 89] # Homogenous list
In [168]: type(list1)
Out[168]: list
In [169]: l2 = [12, 23.45, 231242314125, 'Python', True, str(0), complex(2,3), 2+3j, int(23.
45)]
In [170]: print l2 # non‐homogenous list
[12, 23.45, 231242314125L, 'Python', True, '0', (2+3j), (2+3j), 23]
In [171]: print type(l2)
<type 'list'>
In [172]: print l2[3], type(l2[3]) # indexing
Python <type 'str'>
In [173]: l2[6], type(6) # elements of a list, retain their data type.
Out[173]: ((2+3j), int)
In [174]: print dir(l2) # results in the attributes and methods associated with
'list' type
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__del
slice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '_
_getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '_
_init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__
new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul_
_', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '_
_subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'rem
ove', 'reverse', 'sort']
In [175]: l1 = [] # empty list
In [177]: print l1, type(l1)
[] <type 'list'>
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 71/338
13/11/2016 python Basic and Intermediate Level Modules
In [178]: l1 = [12, 34] # Re‐initialization. Previous object gets overwritten
In [179]: print l1.append(23) # Observe that append() operation doesn't return anything
None
In [180]: print l1
[12, 34, 23]
In [181]: l1.append(['Python', 3456])
In [182]: print l1
[12, 34, 23, ['Python', 3456]]
In [183]: l1.append([56]) # It is different from l1.append(56)
In [184]: print "l1 = ", l1
l1 = [12, 34, 23, ['Python', 3456], [56]]
In [185]: l1.extend(78)
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐185‐7defae611412> in <module>()
‐‐‐‐> 1 l1.extend(78)
TypeError: 'int' object is not iterable
In [186]: l1.extend([78])
In [187]: print l1
[12, 34, 23, ['Python', 3456], [56], 78]
In [188]: l1.extend(['Django', 45567])
In [189]: print l1
[12, 34, 23, ['Python', 3456], [56], 78, 'Django', 45567]
Interview Question : In which cases, list.extend is more suitable than list.append?
extend add the new list to the original list, in the same dimension
append adds the new list to the original list, in separate dimension
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 72/338
13/11/2016 python Basic and Intermediate Level Modules
In [190]: print list1+l1
[12, 23, 34, 56, 67, 89, 12, 34, 23, ['Python', 3456], [56], 78, 'Django', 45
567]
In [191]: l2 = [12, [23, 45], [56]]
In [192]: l3 = [12, [23, 45], [56]]
In [193]: l2+l3
Out[193]: [12, [23, 45], [56], 12, [23, 45], [56]]
In [194]: l2.append(l3) # adding in new dimension
In [195]: print l2
[12, [23, 45], [56], [12, [23, 45], [56]]]
In [196]: l2 = [12, [23, 45], [56]] # reassigning
In [197]: l2.extend(l3)
In [198]: print l2 # It is same as l2+l3
[12, [23, 45], [56], 12, [23, 45], [56]]
In [199]: l2.insert(0, 'Yash')
In [200]: print l2
['Yash', 12, [23, 45], [56], 12, [23, 45], [56]]
In [201]: l2.insert(5, 999) # specifying position is mandatory
In [202]: l2
Out[202]: ['Yash', 12, [23, 45], [56], 12, 999, [23, 45], [56]]
NOTE: list.insert() is different from overwritting
In [204]: l2[5] = 'Nine Nine'
In [205]: print l2
['Yash', 12, [23, 45], [56], 12, 'Nine Nine', [23, 45], [56]]
In [206]: l2.insert(3,[23, ''])
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 73/338
13/11/2016 python Basic and Intermediate Level Modules
In [207]: print l2
['Yash', 12, [23, 45], [23, ''], [56], 12, 'Nine Nine', [23, 45], [56]]
In [208]: l2 = [12, [23, 45], [56]] # reassigning
In [209]: print len(l2)
3
In [210]: l2.insert(len(l2), l3)
In [211]: l2 # It is same as l2.extend(l3)
Out[211]: [12, [23, 45], [56], [12, [23, 45], [56]]]
In [212]: l2.insert(45, 34) # there isn't 45th position. so, added in the last
In [213]: print l2
[12, [23, 45], [56], [12, [23, 45], [56]], 34]
In [214]: print l2.pop() # outputs last element, and removes from list
34
In [215]: print l2
[12, [23, 45], [56], [12, [23, 45], [56]]]
In [216]: l2 = [12, [23, 45], [56]] # reassigning
In [217]: l2.remove(12) # nothing will be outputted
In [218]: print l2
[[23, 45], [56]]
In [219]: l2.remove(56)
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
ValueError Traceback (most recent call last)
<ipython‐input‐219‐33f84afb8304> in <module>()
‐‐‐‐> 1 l2.remove(56)
ValueError: list.remove(x): x not in list
In [220]: l2.remove([56])
In [221]: print l2
[[23, 45]]
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 74/338
13/11/2016 python Basic and Intermediate Level Modules
In [222]: l2.remove([23])
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
ValueError Traceback (most recent call last)
<ipython‐input‐222‐5a17760cd7ae> in <module>()
‐‐‐‐> 1 l2.remove([23])
ValueError: list.remove(x): x not in list
In [223]: l2[0], type(l2)
Out[223]: ([23, 45], list)
In [224]: l2[0].remove(23)
In [225]: print l2
[[45]]
In [226]: l2 = [12, [23, 45], [56]] # reassigning
In [227]: del l2[1] # deleting an element in list
In [228]: l2
Out[228]: [12, [56]]
In [229]: del l2 # deleting a list object
In [230]: print l2
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
NameError Traceback (most recent call last)
<ipython‐input‐230‐9ecc7d9d142b> in <module>()
‐‐‐‐> 1 print l2
NameError: name 'l2' is not defined
In [231]: l3 = ['zero', 0, '0', 'Apple', 1, '1']
In [232]: sorted(l3) # builtin function ; doesn't affect the original object
Out[232]: [0, 1, '0', '1', 'Apple', 'zero']
In [233]: print l3
['zero', 0, '0', 'Apple', 1, '1']
In [234]: l3.sort() # modifies the original object
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 75/338
13/11/2016 python Basic and Intermediate Level Modules
In [235]: print l3
[0, 1, '0', '1', 'Apple', 'zero']
In [236]: reversed(l3)
Out[236]: <listreverseiterator at 0x3c68e10>
In [237]: for i in reversed(l3):
print i,
zero Apple 1 0 1 0
In [238]: list(reversed(l3))
Out[238]: ['zero', 'Apple', '1', '0', 1, 0]
In [239]: l4 = []
for i in reversed(l3):
l4.append(i)
print l4 # This is list type
['zero', 'Apple', '1', '0', 1, 0]
In [240]: l3 # original object didn't change
Out[240]: [0, 1, '0', '1', 'Apple', 'zero']
In [241]: l3.reverse()
In [242]: l3
Out[242]: ['zero', 'Apple', '1', '0', 1, 0]
In [243]: l3.count(1)
Out[243]: 1
In [244]: l3.count('1')
Out[244]: 1
In [245]: l3.append('1')
In [246]: l3
Out[246]: ['zero', 'Apple', '1', '0', 1, 0, '1']
In [247]: l3.count('1')
Out[247]: 2
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 76/338
13/11/2016 python Basic and Intermediate Level Modules
In [248]: l3.append(['1'])
In [249]: l3
Out[249]: ['zero', 'Apple', '1', '0', 1, 0, '1', ['1']]
In [250]: l3.count('1') # dimension account here
Out[250]: 2
In [251]: l3.count(['1'])
Out[251]: 1
4.1a List Comprehensions
syntax:
[logic for i in (initialValue, finalValue, increment/decrement) if condition]
In [252]: week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'S
unday']
In [253]: type(week), type(week[2])
Out[253]: (list, str)
In [254]: print [i for i in week]
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunda
y']
In [255]: for i in week:
print i,
Monday Tuesday Wednesday Thursday Friday Saturday Sunday
In [257]: [print i for i in week]
File "<ipython‐input‐257‐be84efc03df9>", line 1
[print i for i in week]
^
SyntaxError: invalid syntax
NOTE: stdout not possible within comprehension
In [258]: print [i.upper() for i in week]
['MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY', 'SUNDA
Y']
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 77/338
13/11/2016 python Basic and Intermediate Level Modules
In [259]: print [i.lower() for i in week]
['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunda
y']
In [260]: print [i.capitalize() for i in week]
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunda
y']
In [261]: print [i[0:3] for i in week]
['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
In [262]: print [i[:3] for i in week]
['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
In [263]: print [i[0:2] for i in week]
['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su']
In [264]: print [i[3] for i in week]
['d', 's', 'n', 'r', 'd', 'u', 'd']
In [265]: print [i for i in week if i.startswith('T')]
['Tuesday', 'Thursday']
NOTE: else and elif are not possible in list comprehensions
In [267]: print [i for i in week if i.startswith('W')]
['Wednesday']
In [268]: print [i for i in week if len(i) == 8]
['Thursday', 'Saturday']
In [269]: ord('a') # returns the ACSCII value of the character
Out[269]: 97
In [270]: print [ord(i) for i in 'Python Programming']
[80, 121, 116, 104, 111, 110, 32, 80, 114, 111, 103, 114, 97, 109, 109, 105,
110, 103]
In [271]: chr(80) # returns the correpsonding ACSII character for the number
Out[271]: 'P'
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 78/338
13/11/2016 python Basic and Intermediate Level Modules
In [272]: print [chr(i) for i in range(12)]
['\x00', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07', '\x08',
'\t', '\n', '\x0b']
In [273]: print [chr(i) for i in [80, 121, 116, 104, 111, 110, 32, 80, 114, 111, 103, 11
4, 97, 109, 109, 105, 110, 103]]
['P', 'y', 't', 'h', 'o', 'n', ' ', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'm',
'i', 'n', 'g']
In [274]: ''.join([chr(i) for i in [80, 121, 116, 104, 111, 110, 32, 80, 114, 111, 103, 114
97, 109, 109, 105, 110, 103]])
Out[274]: 'Python Programming'
In [275]: print [float(i) for i in range(9)]
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]
Assignment : Generate a Caesar Cipher for a given string using list comprehensions
In [276]: for i in range(4):
print i, i*i
0 0
1 1
2 4
3 9
In [277]: print [i, i*i for i in range(9)]
File "<ipython‐input‐277‐3c71da0ffd9d>", line 1
print [i, i*i for i in range(9)]
^
SyntaxError: invalid syntax
It will not work, as objects resulting from logic are not qualified
In [279]: print [[i, i*i] for i in range(9)]
[[0, 0], [1, 1], [2, 4], [3, 9], [4, 16], [5, 25], [6, 36], [7, 49], [8, 64]]
In [280]: print [(i, i*i) for i in range(9)]
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49), (8, 64)]
In [281]: print [[i, i*i, i*i*i] for i in range(9)]
[[0, 0, 0], [1, 1, 1], [2, 4, 8], [3, 9, 27], [4, 16, 64], [5, 25, 125], [6,
36, 216], [7, 49, 343], [8, 64, 512]]
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 79/338
13/11/2016 python Basic and Intermediate Level Modules
In [282]: [[i, i*i, i*i*i] for i in range(9)]
Out[282]: [[0, 0, 0],
[1, 1, 1],
[2, 4, 8],
[3, 9, 27],
[4, 16, 64],
[5, 25, 125],
[6, 36, 216],
[7, 49, 343],
[8, 64, 512]]
4.1b Nested List comprehensions
In [283]: [(i,i*i, i*i*i, i**4) for i in range(9)]
Out[283]: [(0, 0, 0, 0),
(1, 1, 1, 1),
(2, 4, 8, 16),
(3, 9, 27, 81),
(4, 16, 64, 256),
(5, 25, 125, 625),
(6, 36, 216, 1296),
(7, 49, 343, 2401),
(8, 64, 512, 4096)]
Flattening a multidimensional list
In [285]: matrix = [[11, 22, 33],
[22, 33, 11],
[33, 11, 22]]
print len(matrix)
print matrix
3
[[11, 22, 33], [22, 33, 11], [33, 11, 22]]
In [287]: flattened = []
for row in matrix:
for n in row:
flattened.append(n)
print flattened
[11, 22, 33, 22, 33, 11, 33, 11, 22]
In [289]: flattenedLc = [n for row in matrix for n in row]
print flattenedLc
[11, 22, 33, 22, 33, 11, 33, 11, 22]
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 80/338
13/11/2016 python Basic and Intermediate Level Modules
Assignment : Pythogorean triples, between 1 and 55
a**2 + b**2 = c**2
ex: [3,4,5] WAP to result these triples using for loop, while loop and list comprehension
4.1c Composite List Comprehensions
In [290]: ['Good' if i else "Bad" for i in range(3)] # Duck‐tying
Out[290]: ['Bad', 'Good', 'Good']
In [291]: # It the same as the below
for i in range(3):
if i:
print "Good"
else:
print "Bad"
Bad
Good
Good
In [293]: ["Good" if not i else "Bad" for i in range(3)]
Out[293]: ['Good', 'Bad', 'Bad']
Assignment : Implement Queue mechanism using lists (FIFO Queue)
Assignment : If the temperature on 22 July, 2015 was recorded as 32°C, 44°C, 45.5°C and 22°C in Paris,
Hyderabad, Visakhapatnam and Ontario respectively, what are their temperatures in °F.
Hint: T(°F) = T(°C) × 9/5 + 32
Assignment : If the temperatures on same day this year are forecasted as same numerics in °F, what will be
their corresponding temperature in °C.
Interview Question : What is the sorting algorithm used in python?
Ans: timesort
Interview Question : What is the difference between sort() and sorted()?
Ans: list.sort() is a nethod of list data structure;whereas sorted(list) is a buildin function. list.sort() will modify
the existing list object; sorted(list) will create a new object, without modifying the existing list object. Limitation
of list comprehensions is that pass, break, continue won't work in them.
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 81/338
13/11/2016 python Basic and Intermediate Level Modules
Interview Question 5: Implement the stack mechanism using 'List'
Creating a Stack with Lists
stack works based on LastIn FirstOut (LIFO) mechanism.
The push and pop operations of stack can be mimicked using append() and pop() methods of list,
respectively.
In [1]: stack = [12, 34, 45, 5677]
In [2]: print type(stack)
<type 'list'>
In [3]: stack.append(25) # push operation
In [4]: print stack
[12, 34, 45, 5677, 25]
In [5]: stack.pop() # pop operation
Out[5]: 25
In [6]: stack.pop() # LIFO
Out[6]: 5677
In [7]: stack.append(8880)
In [8]: print stack
[12, 34, 45, 8880]
Creataing a Queue with Lists
Interview Question : Implement a queue mechanism, using collections module
In [9]: from collections import deque
queue = deque(['Python', 'Programming', 'Pearl'])
print queue
deque(['Python', 'Programming', 'Pearl'])
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 82/338
13/11/2016 python Basic and Intermediate Level Modules
In [10]: type(queue) # returns a named tuple # It is of 'collections.deque' type.
Different from basic col types
Out[10]: collections.deque
In [11]: print dir(queue)
['__class__', '__copy__', '__delattr__', '__delitem__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash
__', '__iadd__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne
__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '_
_setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'app
end', 'appendleft', 'clear', 'count', 'extend', 'extendleft', 'maxlen', 'po
p', 'popleft', 'remove', 'reverse', 'rotate']
In [12]: queue.appendleft('George')
In [13]: queue.appendleft('Bush')
In [14]: queue
Out[14]: deque(['Bush', 'George', 'Python', 'Programming', 'Pearl'])
In [15]: queue.pop()
Out[15]: 'Pearl'
In [16]: queue.pop()
Out[16]: 'Programming'
In [17]: queue
Out[17]: deque(['Bush', 'George', 'Python'])
In [18]: queue.clear() # clears the queue; but retains the queue object
In [19]: queue
Out[19]: deque([])
Interview Question : what is the difference between = and ==
= assignment operation ; Also called as Hard COPY
== equivalence checking operation
In [20]: a = 23 # assigning 23 to 'a'
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 83/338
13/11/2016 python Basic and Intermediate Level Modules
In [21]: print a
23
In [22]: a == 23
Out[22]: True
4.1.2 Hard COPY vs Shallow COPY vs Deep COPY
(https://www.youtube.com/watch?
v=yjYIyydmrc0&index=2&list=PLTEjme3I6BCg6PdKkMaysdtuEG1cAv_0)
Hard COPY is the assignment Operation
In [23]: parList = [1,2,3,4,54,5,56,6]
In [24]: childList = parList # Assignment Operation (or) Hard COPY
Assignment operation wont create a new object; rather the new identifier (variable) refers to the same Object
In [26]: print parList, type(parList)
[1, 2, 3, 4, 54, 5, 56, 6] <type 'list'>
In [27]: print childList, type(childList)
[1, 2, 3, 4, 54, 5, 56, 6] <type 'list'>
In [28]: parList == childList
Out[28]: True
In [29]: parList is childList # becoz both are refering to the same object.
Out[29]: True
In [30]: print id(parList), id(childList)
67383048 67383048
In [31]: parList[4]
Out[31]: 54
In [32]: parList[4] = 'Five Four'
In [33]: parList
Out[33]: [1, 2, 3, 4, 'Five Four', 5, 56, 6]
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 84/338
13/11/2016 python Basic and Intermediate Level Modules
In [34]: childList # modifications are reflected in childList
Out[34]: [1, 2, 3, 4, 'Five Four', 5, 56, 6]
In [35]: childList[5] = 'Five'
In [36]: childList
Out[36]: [1, 2, 3, 4, 'Five Four', 'Five', 56, 6]
In [37]: parList # modifications are reflected in parList
Out[37]: [1, 2, 3, 4, 'Five Four', 'Five', 56, 6]
import copy
copy.copy() ‐> Shallow COPY
copy.deepcopy() ‐> Deep COPY
In [38]: parList = [12, 23.34, '1223', 'Python', True, [12, 23, '34', 'Programming']]
# re‐assigning
In [39]: hardCopyList = parList # Hard COPY or assignment operation
In [40]: import copy
shallowCopyList = copy.copy(parList) # shallow COPY
deepCopyList = copy.deepcopy(parList) # Deep COPY
In [41]: print 'parList = %r \nhardCopyList = %r \nshallowCopyList = %r \ndeepCopyList
= %r'%(\
parList, hardCopyList, shallowCopyList, deepCopyList)
parList = [12, 23.34, '1223', 'Python', True, [12, 23, '34', 'Programming']]
hardCopyList = [12, 23.34, '1223', 'Python', True, [12, 23, '34', 'Programmin
g']]
shallowCopyList = [12, 23.34, '1223', 'Python', True, [12, 23, '34', 'Program
ming']]
deepCopyList = [12, 23.34, '1223', 'Python', True, [12, 23, '34', 'Programmin
g']]
In [63]: print 'id(parList) = %16r \nid(hardCopyList) = %11r \nid(shallowCopyList) = %r
\nid(deepCopyList) = %11r'%(\
id(parList), id(hardCopyList), id(shallowCopyList), id(deepCopyLis
t))
id(parList) = 67482848
id(hardCopyList) = 67482848
id(shallowCopyList) = 67483248
id(deepCopyList) = 67482288
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 85/338
13/11/2016 python Basic and Intermediate Level Modules
With this, we can draw inference that shallowCopyList and deepCopyList are creating a new objects
In [43]: parList == hardCopyList == shallowCopyList == deepCopyList
Out[43]: True
In [44]: parList is hardCopyList is shallowCopyList is deepCopyList
Out[44]: False
In [45]: parList is hardCopyList
Out[45]: True
In [46]: parList is shallowCopyList
Out[46]: False
In [47]: parList is deepCopyList
Out[47]: False
In [48]: shallowCopyList is deepCopyList
Out[48]: False
In [49]: parList
Out[49]: [12, 23.34, '1223', 'Python', True, [12, 23, '34', 'Programming']]
In [50]: parList[4] = False
In [60]: print 'parList = %75r \nhardCopyList = %70r \nshallowCopyList = %65r \ndeepCop
yList = %69r'%(\
parList, hardCopyList, shallowCopyList, deepCopyList)
parList = [12, 23.34, '1223', 'Python', False, [12, 23, '34', 'Progra
mming']]
hardCopyList = [12, 23.34, '1223', 'Python', False, [12, 23, '34', 'Progra
mming']]
shallowCopyList = [12, 23.34, '1223', 'Python', True, [12, 23, '34', 'Program
ming']]
deepCopyList = [12, 23.34, '1223', 'Python', True, [12, 23, '34', 'Program
ming']]
In [64]: hardCopyList[2] = 'NEW STRING'
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 86/338
13/11/2016 python Basic and Intermediate Level Modules
In [70]: print 'parList = %81r \nhardCopyList = %76r \nshallowCopyList = %65r \ndeepCop
yList = %69r'%(\
parList, hardCopyList, shallowCopyList, deepCopyList)
parList = [12, 23.34, 'NEW STRING', 'Python', False, [12, 23, '34',
'Programming']]
hardCopyList = [12, 23.34, 'NEW STRING', 'Python', False, [12, 23, '34',
'Programming']]
shallowCopyList = [12, 23.34, '1223', 'Python', True, [12, 23, '34', 'Program
ming']]
deepCopyList = [12, 23.34, '1223', 'Python', True, [12, 23, '34', 'Program
ming']]
In [71]: parList[5][1]
Out[71]: 23
In [72]: parList[5][1] = 88 # changing in second dimension
In [73]: print 'parList = %81r \nhardCopyList = %76r \nshallowCopyList = %65r \ndeepCop
yList = %69r'%(\
parList, hardCopyList, shallowCopyList, deepCopyList)
parList = [12, 23.34, 'NEW STRING', 'Python', False, [12, 88, '34',
'Programming']]
hardCopyList = [12, 23.34, 'NEW STRING', 'Python', False, [12, 88, '34',
'Programming']]
shallowCopyList = [12, 23.34, '1223', 'Python', True, [12, 88, '34', 'Program
ming']]
deepCopyList = [12, 23.34, '1223', 'Python', True, [12, 23, '34', 'Program
ming']]
Now, let us try in 3rd dimension
In [74]: parList = [12, '1223', [23, '34', 'Programming', [56, 45.56, '98.45',
'Flask']]]
In [75]: deepCopyList = copy.deepcopy(parList)
In [76]: parList[2][3][3]
Out[76]: 'Flask'
In [77]: parList[2][3][3] = 'Django'
In [78]: print parList, '\n', deepCopyList
[12, '1223', [23, '34', 'Programming', [56, 45.56, '98.45', 'Django']]]
[12, '1223', [23, '34', 'Programming', [56, 45.56, '98.45', 'Flask']]]
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 87/338
13/11/2016 python Basic and Intermediate Level Modules
Conclusions:
In single dimension lists, if you do not want the copied list to get affected to the changes in source
list, go for shallow COPY.
In multidimensional lists, if you do not want the copied list to get affected to changes in source list,
go for deep COPY.
Other Builtin functions
all() Verifies whether all the elements in the collection(list,tuple,set,dictionary) are True or False
any() Verifies whether any of the elements in the collection(list,tuple,set,dictionary) are True or False
In [79]: l = [1, 2, ‐4, [34, 556, [56, 67, 0]]]
In [80]: any(l)
Out[80]: True
In [81]: all(l) # doesn't consider deep dimensions; only considers the first dimensi
on elements
Out[81]: True
In [82]: l.append('')
In [83]: l
Out[83]: [1, 2, ‐4, [34, 556, [56, 67, 0]], '']
In [84]: all(l) # '' has False as boolean result
Out[84]: False
4.2 Tuples
Tuples are immutable (means can't be edited)
Tuples have all the capabilities of lists, expect modification.
Tuples can be indexed
In [85]: t = () # empty tuple
In [86]: print t, type(t)
() <type 'tuple'>
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 88/338
13/11/2016 python Basic and Intermediate Level Modules
In [87]: print dir(t)
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__',
'__getslice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__l
en__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex_
_', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subcla
sshook__', 'count', 'index']
In [88]: t2 = ('Apple', 'Mango', 'Goa') # simple Homogeneous tuple
In [89]: t3 = ('Apple', 123, 34.56, True) # simple non‐homogenous tuple
Buitin functions can be applied on them
In [90]: any(t3)
Out[90]: True
In [91]: all(t3)
Out[91]: True
Indexing and slicing Tuples
In [92]: print t2
('Apple', 'Mango', 'Goa')
In [93]: print t2[1]
Mango
In [94]: t3[:2]
Out[94]: ('Apple', 123)
In [95]: t3[‐1]
Out[95]: True
In [96]: t3[1:]
Out[96]: (123, 34.56, True)
In [97]: t3.count(True)
Out[97]: 1
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 89/338
13/11/2016 python Basic and Intermediate Level Modules
In [98]: t3.index(True)
Out[98]: 3
In [99]: t3
Out[99]: ('Apple', 123, 34.56, True)
In [100]: t3[:]
Out[100]: ('Apple', 123, 34.56, True)
In [101]: t3[::]
Out[101]: ('Apple', 123, 34.56, True)
In [102]: t3[::‐1]
Out[102]: (True, 34.56, 123, 'Apple')
In [103]: t3 is t3[:] is t3[::]
Out[103]: True
In [104]: t3 is t3[::‐1]
Out[104]: False
In [105]: numbers = range(9)
print numbers
print type(numbers)
[0, 1, 2, 3, 4, 5, 6, 7, 8]
<type 'list'>
In [106]: # List to tuple conversion
tuple(numbers) # tuple() ‐ built‐in function for converting to tuple
Out[106]: (0, 1, 2, 3, 4, 5, 6, 7, 8)
In [107]: print type(tuple(numbers)), type(numbers)
<type 'tuple'> <type 'list'>
In [108]: t2 + t3 # concatenation
Out[108]: ('Apple', 'Mango', 'Goa', 'Apple', 123, 34.56, True)
In [109]: t2 + (3,4)
Out[109]: ('Apple', 'Mango', 'Goa', 3, 4)
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 90/338
13/11/2016 python Basic and Intermediate Level Modules
In [110]: t2 + (3)
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐110‐bf92910fe75d> in <module>()
‐‐‐‐> 1 t2 + (3)
TypeError: can only concatenate tuple (not "int") to tuple
In [111]: t2 + (3,)
Out[111]: ('Apple', 'Mango', 'Goa', 3)
In [112]: t2 + t3 != t3 + t2 # commutative Property not satisfied
Out[112]: True
In [113]: t2*2 # Repition
Out[113]: ('Apple', 'Mango', 'Goa', 'Apple', 'Mango', 'Goa')
In [114]: print len(t2), len(t2*2)
3 6
In [116]: t5 = t2[0:len(t2)‐1] # same as t2[0:2]
print t5
('Apple', 'Mango')
in
Membership verification operator. Used on lists, tuples, strings, dictionaries
In [117]: 'Apple' in t5
Out[117]: True
In [118]: 'Banana' in t5
Out[118]: False
In [119]: 'Apple ' in t5
Out[119]: False
In [120]: 'Apples' not in t5
Out[120]: True
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 91/338
13/11/2016 python Basic and Intermediate Level Modules
is ‐‐ is not
in ‐‐ not in
Assigment 1: Try all the operations performed on Lists, to tuples, and observe the difference
Tuples are Immutable
In [121]: t3
Out[121]: ('Apple', 123, 34.56, True)
In [122]: t3[0] = 'Kiwi'
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐122‐69c0cea87f59> in <module>()
‐‐‐‐> 1 t3[0] = 'Kiwi'
TypeError: 'tuple' object does not support item assignment
In [123]: t2**2 # power operation
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐123‐7e012b19a351> in <module>()
‐‐‐‐> 1 t2**2 # power operation
TypeError: unsupported operand type(s) for ** or pow(): 'tuple' and 'int'
NOTE: Tuple are Immutable; So, they can't be edited. But, can be overwritten
Buitin functions on Tuples
In [124]: t1 = tuple(range(9)); t2 = tuple(range(3,12))
print "t1 = ", t1,'\n', "t2 = ", t2
t1 = (0, 1, 2, 3, 4, 5, 6, 7, 8)
t2 = (3, 4, 5, 6, 7, 8, 9, 10, 11)
In [125]: t3 = tuple(xrange(9))
print "t3 = ", t3
t3 = (0, 1, 2, 3, 4, 5, 6, 7, 8)
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 92/338
13/11/2016 python Basic and Intermediate Level Modules
In [126]: # cmp(obj1, obj2) ‐ builtin function. result in
# +1 if obj1 is greater,
# ‐1 if obj1 is smaller, and
# 0 if both obj1 and obj2 are equal
cmp(t1,t2)
Out[126]: ‐1
In [127]: cmp(t2,t1)
Out[127]: 1
In [128]: cmp(t1,t1)
Out[128]: 0
In [129]: min(t2)
Out[129]: 3
In [130]: min((0, 1, 2, 3, 4, 5, 6, 7, 8, (‐1))) # even multidimensional elements are c
onsidered
Out[130]: ‐1
In [131]: min((0, 1, 2, 3, 4, 5, 6, 7, 8, (‐1), (‐1, 9))) # even multidimensional eleme
nts are considered
Out[131]: ‐1
In [132]: min((0, 1, 2, 3, 4, 5, 6, 7, 8, (‐1, ‐9))) # even multidimensional elements a
re considered
Out[132]: 0
Assignment : Try the min() function for lists, and lists within tuples
In [133]: max(t2)
Out[133]: 11
In [134]: max((0, 1, 2, 3, 4, 5, 6, 7, 8, (‐1, 100))) # even multidimensional elements
are considered
Out[134]: (‐1, 100)
In [135]: max((0, 1, 2, 3, 4, 5, 6, 7, 8, (100), (78,)))
Out[135]: (78,)
Inference: (100) is an integer, whereas (78,) is a tuple object.
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 93/338
13/11/2016 python Basic and Intermediate Level Modules
In [136]: max((0, 1, 2, 3, 4, 5, 6, 7, 8, (‐1, 100), (100), (‐1, ‐2, 100)))
Out[136]: (‐1, 100)
In [137]: max((0, 1, 2, 3, 4, 5, 6, 7, 8, (‐1, 100), [‐1, 100] ))
Out[137]: (‐1, 100)
In [138]: max((0, 1, 2, 3, 4, 5, 6, 7, 8, (‐1, 100), [‐1, 100], {‐1,100}, {‐1:100} ))
Out[138]: (‐1, 100)
In [144]: () > set() > [] > {} # order in collections
Out[144]: True
In [ ]: list(t2) # list() ‐ builtin function; used to convert to list type
In [145]: sorted(t2) # convert any collection type, to list; then sorts; Creates new o
bject
Out[145]: [3, 4, 5, 6, 7, 8, 9, 10, 11]
Tuple Unpacking
In [146]: a = 12
In [147]: print a
12
In [149]: a,b = 420, 950
print "a =", a
print "b =", b
print type(a)
a = 420
b = 950
<type 'int'>
In [150]: a = 420, 950
print "a =", a
print type(a)
a = (420, 950)
<type 'tuple'>
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 94/338
13/11/2016 python Basic and Intermediate Level Modules
In [151]: a,b = 420
print "a =", a
print "b =", b
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐151‐4dee3c1eb5cb> in <module>()
‐‐‐‐> 1 a,b = 420
2
3 print "a =", a
4 print "b =", b
TypeError: 'int' object is not iterable
NOTE: For unpacking, ensure that the number of identifiers in left side of assignment operator, must be equal
to the number of objects(values) on the righthand side
In [153]: (a,b,c,d,e) = 12, 23, 34, 45, 45
print a, type(a)
12 <type 'int'>
In [154]: (a,b,c,d,e) = (12, 23, 34, 45, 45)
print a, type(a)
12 <type 'int'>
In [155]: (a,b,c,d,e) = [12, 23, 34, 45, 45]
print a, type(a)
12 <type 'int'>
In [156]: [a,b,c,d,e] = [12, 23, 34, 45, 45] # List unpacking
print a, type(a)
12 <type 'int'>
In [157]: print [a,b,c,d,e], type([a,b,c,d,e])
[12, 23, 34, 45, 45] <type 'list'>
Lists within Tuples, and tuples within Lists
In [158]: th = (12, 23, 34, [54, 54, 65,(23, 45), [34, 45]], ('python', 'programming'))
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 95/338
13/11/2016 python Basic and Intermediate Level Modules
In [159]: len(th)
Out[159]: 5
In [160]: th[4]
Out[160]: ('python', 'programming')
In [161]: print type(th[3]), type(th[4])
<type 'list'> <type 'tuple'>
In [162]: th[3][0]
Out[162]: 54
Interview Question : Can the list elements present within the tuple, be changed?
In [163]: th[3][0] = 'Five Four'
In [164]: print th
(12, 23, 34, ['Five Four', 54, 65, (23, 45), [34, 45]], ('python', 'programmi
ng'))
In [165]: th[4][0]
Out[165]: 'python'
In [166]: th[4][0] = 'Django'
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐166‐1b45a8ec8717> in <module>()
‐‐‐‐> 1 th[4][0] = 'Django'
TypeError: 'tuple' object does not support item assignment
In [167]: th[3][4][0]
Out[167]: 34
In [168]: th[3][4][0] = 'Three Four'
In [169]: th[3][3][0]
Out[169]: 23
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 96/338
13/11/2016 python Basic and Intermediate Level Modules
In [170]: th[3][3][0] = 'two three'
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐170‐f35586ec7407> in <module>()
‐‐‐‐> 1 th[3][3][0] = 'two three'
TypeError: 'tuple' object does not support item assignment
Inference: The mutability of an element depends on its primary collection type
Assignment : Write a Program to convert this heterogeneous tuple completely to flat tuple.
Input = (2,23, 34, [55, 'six six', (77, 88, ['nine nine', 0])])
Output = (2, 23, 34, 55, 'six six', 77, 88, 'nine nine', 0)
Tuple Comprehensions (or) Generator expressions
In [171]: tc = (i for i in range(9))
In [172]: print tc
<generator object <genexpr> at 0x041246C0>
In [173]: len(tc)
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐173‐a4c5085a07fe> in <module>()
‐‐‐‐> 1 len(tc)
TypeError: object of type 'generator' has no len()
In [174]: print tc.next()
0
In [175]: print tc.next()
1
In [176]: print tc.next()
2
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 97/338
13/11/2016 python Basic and Intermediate Level Modules
In [177]: print tc.next(), tc.next(), tc.next(), tc.next(), tc.next(), tc.next()
3 4 5 6 7 8
In [178]: print tc.next()
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
StopIteration Traceback (most recent call last)
<ipython‐input‐178‐b701980f9cc2> in <module>()
‐‐‐‐> 1 print tc.next()
StopIteration:
NOTE: Calling tc.next() when there is no value in that, results in StopIteration exception
In [179]: tc = (i for i in range(9))
In [180]: for ele in tc:
print ele,
0 1 2 3 4 5 6 7 8
In [181]: [r for r in tc] # Once it results all the data, there will not be any more ele
ment in that object
Out[181]: []
In [182]: tc = (i for i in range(9))
In [183]: [r for r in tc]
Out[183]: [0, 1, 2, 3, 4, 5, 6, 7, 8]
In [184]: tc = (i for i in range(9))
tl = [i for i in tc]
print type(tc), type(tl)
<type 'generator'> <type 'list'>
In [185]: [i.next() for i in tc] # no exception, as there is no element in 'tc'
Out[185]: []
Interview Question : what is the result of this operation:
tc = (i for i in range(9)); [i.next() for i in tc]
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 98/338
13/11/2016 python Basic and Intermediate Level Modules
In [186]: tc = (i for i in range(9))
[i.next() for i in tc] # 'i' is an integer, but not an iterator; tc is i
terator;
# During iteration, elements become basic data ty
pes
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
AttributeError Traceback (most recent call last)
<ipython‐input‐186‐e300884eaf16> in <module>()
1 tc = (i for i in range(9))
‐‐‐‐> 2 [i.next() for i in tc] # 'i' is an integer, but not an iterato
r; tc is iterator;
3 # During iteration, elements become basi
c data types
AttributeError: 'int' object has no attribute 'next'
In [187]: [type(i) for i in tc]
Out[187]: [int, int, int, int, int, int, int, int]
In [188]: tc = (i for i in [(12, 34), 12, 23, 'String', 'Python', True, 23.2])
In [189]: [i for i in tc]
Out[189]: [(12, 34), 12, 23, 'String', 'Python', True, 23.2]
In [190]: print [type(i) for i in tc]
[]
In [191]: tc = (i for i in [(12, 34), 12, 23, 'String', 'Python', True, 23.2])
print [type(i) for i in tc]
[<type 'tuple'>, <type 'int'>, <type 'int'>, <type 'str'>, <type 'str'>, <typ
e 'bool'>, <type 'float'>]
Assignment : practice all the exercises performed on list comprehensions, on tuple comprehensions
4.3 Sets
sets are unordered; Then can't be indexed
sets doesn't store duplicates; It will discard the two and other consequent occurrences of the same
element.
denoted with {}
In [192]: s1 = set() # empty set # set() is a builtin function
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 99/338
13/11/2016 python Basic and Intermediate Level Modules
In [193]: print s1, type(s1)
set([]) <type 'set'>
In [194]: s2 = {9,1,2,2,3,4,5,3,5} # simple set
print s2, type(s2)
set([1, 2, 3, 4, 5, 9]) <type 'set'>
In [195]: s3 = {1,2,[1,2], (1,2), 1,2} # compound set with a list and a tuple as eleme
nts
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐195‐1fd6a6c319ec> in <module>()
‐‐‐‐> 1 s3 = {1,2,[1,2], (1,2), 1,2} # compound set with a list and a tuple
as elements
TypeError: unhashable type: 'list'
NOTE: Elements in a set must be immutable only.
mutable ‐ list
Immutable ‐ tuple, string, int, float, long int
In [196]: s3 = {1,2,tuple([1,2]), (1,2), 1,2}
print s3, type(s3)
set([(1, 2), 1, 2]) <type 'set'>
Interview Question : What is the simplest way to remove duplicates in a list?
Ans list(set(list1))
In [197]: myList = [45,1,2,3,2,3,3,4,5,6,4,4,4,45,45]
myList = list(set(myList)) # set() and list() are buit‐in functions
print type(myList), myList
<type 'list'> [1, 2, 3, 4, 5, 6, 45]
In [198]: s4 = {'Apple', 'Mango', 'Banana', 12, 'Bnana', 'Mango'}
print type(s4), s4
<type 'set'> set([12, 'Mango', 'Bnana', 'Banana', 'Apple'])
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 100/338
13/11/2016 python Basic and Intermediate Level Modules
In [199]: print dir(s4) # set attributes
['__and__', '__class__', '__cmp__', '__contains__', '__delattr__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__',
'__iand__', '__init__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le
__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduc
e__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__seta
ttr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'a
dd', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersec
tion', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop',
'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'u
pdate']
NOTE: As sets can't be indexed, we need not bother about the way the sequence in which the elements are
taken into the set.
NOTE: Sets doesn't support arithmetic Operations.
In [200]: s5 = {'Mercedes', 'Toyota', 'Maruthi', 'Hyundai'}
In [201]: s4 + s5 # + is not even used as concatenation operator on sets
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐201‐b57dac89ce6c> in <module>()
‐‐‐‐> 1 s4 + s5 # + is not even used as concatenation operator on sets
TypeError: unsupported operand type(s) for +: 'set' and 'set'
In [202]: s4 ‐ s5 # It means to get elements of s4, which are not present in s5
Out[202]: {12, 'Apple', 'Banana', 'Bnana', 'Mango'}
In [203]: s5 = {'Mercedes', 'Toyota', 'Maruthi', 'Hyundai', 'Mango'}
In [204]: s4 ‐ s5
Out[204]: {12, 'Apple', 'Banana', 'Bnana'}
In [206]: # list to tuple conversion
countries = set(['India', 'Afganistan', 'Sri Lanka', 'Nepal'])
print type(countries), countries
<type 'set'> set(['Afganistan', 'Sri Lanka', 'Nepal', 'India'])
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 101/338
13/11/2016 python Basic and Intermediate Level Modules
In [207]: # tuple to list conversion
brics = set(('Brazil', 'Russia', 'India', 'China', 'South Africa'))
print type(brics), brics
<type 'set'> set(['Brazil', 'China', 'India', 'Russia', 'South Africa'])
Interview Question : what is the result of set('Python Programming')
In [208]: # string to set of characters
strSet = set('Python Programming')
print type(strSet), strSet
<type 'set'> set(['a', ' ', 'g', 'i', 'h', 'm', 'o', 'n', 'P', 'r', 't',
'y'])
In [209]: # List to set conversion
strSet1 = set(['Python Programming'])
print type(strSet1), strSet1
<type 'set'> set(['Python Programming'])
In [210]: # tuple to set conversion
strSet2 = set(('Python Programming'))
print type(strSet2), strSet2
<type 'set'> set(['a', ' ', 'g', 'i', 'h', 'm', 'o', 'n', 'P', 'r', 't',
'y'])
Interview Question : what is the result of set(1221)?
In [211]: set(1221)
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐211‐a4823664953d> in <module>()
‐‐‐‐> 1 set(1221)
TypeError: 'int' object is not iterable
In [212]: set('1221')
Out[212]: {'1', '2'}
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 102/338
13/11/2016 python Basic and Intermediate Level Modules
In [213]: set([1221])
Out[213]: {1221}
In [214]: set([1221, 12221, 1221])
Out[214]: {1221, 12221}
In [215]: import sets
c:\python27\lib\site‐packages\ipykernel\__main__.py:1: DeprecationWarning: th
e sets module is deprecated
if __name__ == '__main__':
In [216]: # list to sets
asean = sets.Set(['Myanmar', 'Indonesia', 'Malaysia', 'Philiphines', 'Thailan
d'])
print type(asean), asean # Observe the type of the object
<class 'sets.Set'> Set(['Malaysia', 'Philiphines', 'Indonesia', 'Myanmar', 'T
hailand'])
In [217]: # list contains a list and tuple in it
africa = sets.Set(['south Africa', 'Mozambique', ['Moracco', 'tunisia'], ('ken
ya', 'sudan')])
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐217‐b1538a717281> in <module>()
‐‐‐‐> 1 africa = sets.Set(['south Africa', 'Mozambique', ['Moracco', 'tunisi
a'], ('kenya', 'sudan')])
c:\python27\lib\sets.pyc in __init__(self, iterable)
412 self._data = {}
413 if iterable is not None:
‐‐> 414 self._update(iterable)
415
416 def __getstate__(self):
c:\python27\lib\sets.pyc in _update(self, iterable)
357 try:
358 for element in it:
‐‐> 359 data[element] = value
360 return
361 except TypeError:
TypeError: unhashable type: 'list'
In [218]: africa = sets.Set(['south Africa', 'Mozambique', ('Moracco', 'tunisia'), ('ken
ya', 'sudan')])
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 103/338
13/11/2016 python Basic and Intermediate Level Modules
In [219]: print africa
Set([('Moracco', 'tunisia'), ('kenya', 'sudan'), 'Mozambique', 'south Afric
a'])
In [220]: engineers = set(['John', 'Jane', 'Jack', 'Janice'])
programmers = sets.Set({'Jack', 'Sam', 'Susan', 'Janice'})
managers = {'Jane', 'Jack', 'Susan', 'Zack'}
print type(engineers), type(programmers), type(managers)
<type 'set'> <class 'sets.Set'> <type 'set'>
In [221]: programmers = set(programmers)
print type(programmers)
<type 'set'>
4.3. 2 Set Operations
| ‐ union operator
& ‐ Intersection operator
‐ ‐ difference operator
In [222]: employees = engineers | programmers | managers
print employees
set(['Jack', 'Sam', 'Susan', 'Jane', 'Janice', 'John', 'Zack'])
In [223]: engg_managers = engineers & managers
print engg_managers
set(['Jane', 'Jack'])
In [224]: onlyManagers = managers ‐ engineers ‐ programmers # same as (managers ‐ engine
ers) ‐ programmers
print onlyManagers
set(['Zack'])
In [225]: onlyEngineers = engineers ‐ managers ‐ programmers
print onlyEngineers
set(['John'])
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 104/338
13/11/2016 python Basic and Intermediate Level Modules
4.3.3 Mutability of sets
In [226]: engineers.add('Naseer') # add ‐ to add an element to the set
In [227]: print engineers
set(['Jane', 'Naseer', 'Janice', 'John', 'Jack'])
4.3.4 SuperSet and Subset
In [228]: employees.issuperset(engineers)
Out[228]: False
In [229]: engineers.issuperset(employees)
Out[229]: False
In [230]: print engineers, '\n', employees
set(['Jane', 'Naseer', 'Janice', 'John', 'Jack'])
set(['Jack', 'Sam', 'Susan', 'Jane', 'Janice', 'John', 'Zack'])
In [231]: employees.add('Naseer')
In [232]: employees.issuperset(engineers)
# It means that every element of 'engineers' set is present in 'employees' set
Out[232]: True
In [233]: employees.discard('Susan')
In [234]: print employees
set(['Naseer', 'Jack', 'Sam', 'Jane', 'Janice', 'John', 'Zack'])
Interview Question : what is the error that occurs for set.discard(element), when the element is not present
in the set
In [235]: employees.discard('Shoban')
Observation: didn't result any execption, even though 'Shoban' is not present in set
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 105/338
13/11/2016 python Basic and Intermediate Level Modules
4.3.4 frozenset
set is a mutable object; elements in a set can be modified
frozenset is an immutable object; elements in a frozenset can't be modified
In [236]: vetoCountries = set(['US', 'UK', 'Russia', 'China', 'France'])
print vetoCountries
set(['France', 'China', 'UK', 'US', 'Russia'])
In [237]: print dir(vetoCountries)
['__and__', '__class__', '__cmp__', '__contains__', '__delattr__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__',
'__iand__', '__init__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le
__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduc
e__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__seta
ttr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'a
dd', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersec
tion', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop',
'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'u
pdate']
In [238]: vetoCountries = frozenset(['US', 'UK', 'Russia', 'China', 'France'])
print vetoCountries
frozenset(['France', 'China', 'UK', 'US', 'Russia'])
In [239]: print dir(vetoCountries)
['__and__', '__class__', '__cmp__', '__contains__', '__delattr__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__',
'__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__',
'__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__',
'__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__',
'__subclasshook__', '__xor__', 'copy', 'difference', 'intersection', 'isdisj
oint', 'issubset', 'issuperset', 'symmetric_difference', 'union']
In [240]: testSet = {12, 12.34, True, (45.67, (23, 45)), 'Omen', 2+3j, set(['France','R
ussia'])}
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐240‐0dec7e97501d> in <module>()
‐‐‐‐> 1 testSet = {12, 12.34, True, (45.67, (23, 45)), 'Omen', 2+3j, set(['F
rance','Russia'])}
TypeError: unhashable type: 'set'
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 106/338
13/11/2016 python Basic and Intermediate Level Modules
In [241]: testSet = {12, 12.34, True, (45.67, (23, 45)), 'Omen', 2+3j, frozenset(['Fran
ce','Russia'])}
print testSet, type(testSet)
set([True, (2+3j), 'Omen', 12.34, 12, frozenset(['Russia', 'France']), (45.6
7, (23, 45))]) <type 'set'>
NOTE: Sets are mutable (can be changed); frozensets are immutable (can't be changed). Both sets and
frozensets can store immutable objects only.
As set is mutable, it can't be placed in a set; whereas as frozenset is immutable, it can be placed within a set
or frozenset.
In [242]: fruits = {'Mango', 'Apple', 'Papaya', 'apple'}
vegetables = {'Beetroot', 'cabbage', 'Carrot', 'Carrot'}
In [243]: fruitsAndVegetables = fruits.union(vegetables)
print fruitsAndVegetables
set(['Beetroot', 'Mango', 'Papaya', 'apple', 'Carrot', 'cabbage', 'Apple'])
In [244]: fruits.update('tomato')
In [245]: print fruits
set(['a', 'Papaya', 'apple', 'm', 'o', 'Mango', 't', 'Apple'])
In [246]: fruits.update(['tomato'])
fruits.update(('banana')) # string
fruits.update({'Banana'})
print fruits
set(['a', 'tomato', 'b', 'Papaya', 'apple', 'm', 'o', 'n', 'Mango', 't', 'Ban
ana', 'Apple'])
In [247]: fruits.update(('banana',)) # tuple element
print fruits
set(['a', 'tomato', 'b', 'Papaya', 'apple', 'banana', 'm', 'o', 'n', 'Mango',
't', 'Banana', 'Apple'])
In [248]: fruits.discard('a')
print fruits
set(['tomato', 'b', 'Papaya', 'apple', 'banana', 'm', 'o', 'n', 'Mango', 't',
'Banana', 'Apple'])
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 107/338
13/11/2016 python Basic and Intermediate Level Modules
In [249]: fruits.discard('t')
print fruits
set(['tomato', 'b', 'Papaya', 'apple', 'banana', 'm', 'o', 'n', 'Mango', 'Ban
ana', 'Apple'])
In [250]: fruits.discard('m','o', 't')
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐250‐f92a0d176540> in <module>()
‐‐‐‐> 1 fruits.discard('m','o', 't')
TypeError: discard() takes exactly one argument (3 given)
Inference: set.discard() will discards only one element once
In [251]: fruits.discard(('m','o', 't'))
print fruits
set(['tomato', 'b', 'Papaya', 'apple', 'banana', 'm', 'o', 'n', 'Mango', 'Ban
ana', 'Apple'])
Inference: set.discard() tries to locate and remove the tuple ('m','o', 't')
In [252]: fruits.intersection(vegetables)
Out[252]: set()
In [253]: vegetables.update(['tomato', 'watermelon'])
print vegetables
set(['Beetroot', 'tomato', 'cabbage', 'Carrot', 'watermelon'])
In [254]: fruits.intersection(vegetables)
Out[254]: {'tomato'}
In [255]: print fruits ‐ vegetables
set(['b', 'Papaya', 'apple', 'm', 'o', 'n', 'Mango', 'Banana', 'banana', 'App
le'])
Observation: Observe that fruits.intersection(vegetables) elements are not present
In [256]: print vegetables ‐ fruits
set(['Beetroot', 'cabbage', 'Carrot', 'watermelon'])
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 108/338
13/11/2016 python Basic and Intermediate Level Modules
In [257]: fruits.intersection(vegetables) == vegetables.intersection(fruits)
Out[257]: True
In [260]: fruits ‐ vegetables != vegetables ‐ fruits
Out[260]: True
NOTE: set difference is not Commutative; whereas intersection attribute of set is Commutative. Intersection
results in the common elements among the sets given
In [261]: fruits.isdisjoint(vegetables) # no, there is a common element
Out[261]: False
In [262]: fruits.isdisjoint(vetoCountries) #yes, there is no common element
Out[262]: True
In [263]: print fruits
print fruits.pop() # It will remove some element in random
print fruits
set(['tomato', 'b', 'Papaya', 'apple', 'banana', 'm', 'o', 'n', 'Mango', 'Ban
ana', 'Apple'])
tomato
set(['b', 'Papaya', 'apple', 'banana', 'm', 'o', 'n', 'Mango', 'Banana', 'App
le'])
In [265]: print fruits
print fruits.remove('b') # To remove a particular element; set.remove() will
not return anything
print fruits
set(['b', 'Papaya', 'apple', 'banana', 'm', 'o', 'n', 'Mango', 'Banana', 'App
le'])
None
set(['Papaya', 'apple', 'banana', 'm', 'o', 'n', 'Mango', 'Banana', 'Apple'])
Assignment : Explore the differences between set.remove() vs set.discard() vs set.pop()
Assignment : Explore the differences between set.update() and set.add()
Interview Question : what is the difference between discard, pop and remove methods of set.
In [266]: print asean
Set(['Malaysia', 'Philiphines', 'Indonesia', 'Myanmar', 'Thailand'])
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 109/338
13/11/2016 python Basic and Intermediate Level Modules
In [267]: print asean.pop() # deletes an elemnt, in random; So, not preferred
Malaysia
In [268]: asean.remove('Myanmar') # delete the given element
NOTE: remove() can't delete multiple elements
In [269]: print asean
Set(['Philiphines', 'Indonesia', 'Thailand'])
In [270]: asean.remove('Myanmar') # delete the given element
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
KeyError Traceback (most recent call last)
<ipython‐input‐270‐fe684ca56941> in <module>()
‐‐‐‐> 1 asean.remove('Myanmar') # delete the given element
c:\python27\lib\sets.pyc in remove(self, element)
516 """
517 try:
‐‐> 518 del self._data[element]
519 except TypeError:
520 transform = getattr(element, "__as_temporarily_immutable_
_", None)
KeyError: 'Myanmar'
In [271]: asean.discard('Myanmar')
Inference: set.discard() will not throw any exception, even if the quieried element is not present
Assignment : try the set.remove(), set.discard() and set.pop() with multiple elements, and with string in
different collections
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 110/338
13/11/2016 python Basic and Intermediate Level Modules
Conclusion:
set.remove() vs set.discard() vs set.pop()
set.remove() ‐ Used to remove an element. Throws KeyError, if the specifed elemen
t is not present
set.discard() ‐ Used to remove an element. Doesn't raise any error, if specified e
lement is not present.
set.pop() ‐ Used to remove and RETURN a random element from the set. Raises ke
yError, if no element is present.
for sets A and B,
symmetric difference is (A‐B) | (B‐A)
It is same as union intersection
In [273]: fruits = {'Mango', 'Apple', 'Papaya', 'tomato'}
vegetables = {'Beetroot', 'cabbage', 'tomato', 'Carrot', 'Carrot'}
In [274]: fruits.symmetric_difference(vegetables)
Out[274]: {'Apple', 'Beetroot', 'Carrot', 'Mango', 'Papaya', 'cabbage'}
In [275]: # set.symmetric_difference() is cumulative
fruits.symmetric_difference(vegetables) == vegetables.symmetric_difference(fru
its)
Out[275]: True
Interview Question : what is the result of set1 = {1, 'Python', True}
In [276]: set1 = {1, 'Python', True}
print type(set1), set1
<type 'set'> set(['Python', True])
In [277]: id(1), id(True)
Out[277]: (43612384, 1593123908)
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 111/338
13/11/2016 python Basic and Intermediate Level Modules
NOTE: True is preferred as it is builtin object
In [278]: print all(set1)
True
In [279]: print any(set1)
True
In [280]: set2 = {10, 10.9, 0.01, 0, 'Prog', None, ''}
In [281]: print all(set2)
False
In [282]: print any(set2)
True
In [283]: for i in set2:
print i,
0 10 None 10.9 Prog 0.01
In [284]: lc = [i for i in set2] # list comprehension
print type(lc), lc
<type 'list'> ['', 0, 10, None, 10.9, 'Prog', 0.01]
In [285]: sc = {i for i in set2} # set comprehension
print type(sc), sc
<type 'set'> set(['', 0, 10, None, 10.9, 'Prog', 0.01])
enumerate() builtin function; enumerate() stores the index of the elements iterated.
In [286]: for i,j in enumerate(set2):
print i,j
0
1 0
2 10
3 None
4 10.9
5 Prog
6 0.01
In [287]: max(set2), min(set2)
Out[287]: ('Prog', None)
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 112/338
13/11/2016 python Basic and Intermediate Level Modules
In [288]: a = None; print type(a)
<type 'NoneType'>
In [289]: sorted(set2)
Out[289]: [None, 0, 0.01, 10, 10.9, '', 'Prog']
In [290]: len(set2)
Out[290]: 7
4.3.6 Orderedset
Used to store elements in an ascending order
This is a module, to be imported
This module doesn;t come with standard library
It must be installed using the command
pip install orderedset
NOTE: If you are working in windows, and the error is as below,
error: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat). Get it
from http://aka.ms/vcpython27
then, download VC++ compiler from http://aka.ms/vcpython27 (http://aka.ms/vcpython27) and install.
In [291]: import orderedset
In [292]: oset = orderedset.OrderedSet([11, 2, 3.33, '1', 1, 'python', frozenset('tomat
o')])
print type(oset)
print oset # orderedset.OrderedSet() ensures that the assigned order of th
e set is retained.
<class 'orderedset._orderedset.OrderedSet'>
OrderedSet([11, 2, 3.33, '1', 1, 'python', frozenset(['a', 'm', 't', 'o'])])
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 113/338
13/11/2016 python Basic and Intermediate Level Modules
In [293]: print dir(oset)
['__abstractmethods__', '__and__', '__class__', '__contains__', '__delattr_
_', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute_
_', '__getitem__', '__gt__', '__hash__', '__iand__', '__init__', '__ior__',
'__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__metacl
ass__', '__module__', '__ne__', '__new__', '__or__', '__pyx_vtable__', '__qua
lname__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed_
_', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str_
_', '__sub__', '__subclasshook__', '__weakref__', '__xor__', '_abc_cache', '_
abc_negative_cache', '_abc_negative_cache_version', '_abc_registry', '_from_i
terable', '_hash', 'add', 'clear', 'copy', 'difference', 'difference_update',
'discard', 'index', 'intersection', 'intersection_update', 'isdisjoint', 'is
orderedsubset', 'isorderedsuperset', 'issubset', 'issuperset', 'pop', 'remov
e', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
In [294]: oset.update('AI')
In [295]: print oset # Observe that updated elements are placed in the end (right‐mos
t)
OrderedSet([11, 2, 3.33, '1', 1, 'python', frozenset(['a', 'm', 't', 'o']),
'A', 'I'])
In [296]: oset.update(['AI'])
print oset
OrderedSet([11, 2, 3.33, '1', 1, 'python', frozenset(['a', 'm', 't', 'o']),
'A', 'I', 'AI'])
In [297]: print oset.pop()
AI
In [298]: print oset.pop()
I
In [299]: for _ in range(4): print oset.pop()
A
frozenset(['a', 'm', 't', 'o'])
python
1
In [300]: print oset # Observe that four set elements were removed from the last(right‐
most)
OrderedSet([11, 2, 3.33, '1'])
Assignment : Try to get a sorted set from the given set, using orderedset module
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 114/338
13/11/2016 python Basic and Intermediate Level Modules
4.4 Dictionaries
It is a key/value structure
It contain series of key:value pair, separated by comma(,) operator and enclosed in {} .
eg: dict1 = {key1:value1, key2: value2}
It doesn't store duplicate keys
The keys in dictionaries should be immutable (string, tuple, int, float, frozenset). whereas list, set is
not possible.
Indexing is done based on keys, and not position.
In [301]: d = {} # Empty dictionary
print type(d), d
<type 'dict'> {}
In [302]: d1 = {12}
print type(d1)
<type 'set'>
Interview Question: what is the type of 'd2' in the below statement:
d2 = {12,}
In [303]: d2 = {12,}
print type(d2)
<type 'set'>
In [ ]: d3 = {12:23}
print type(d3)
In [304]: d4 = {'a': 'apple', 'b': 'banana', 'c': 'cat'} # method 1 of dictionary crea
tion
print d4 # Observe the order of the el
ements
{'a': 'apple', 'c': 'cat', 'b': 'banana'}
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 115/338
13/11/2016 python Basic and Intermediate Level Modules
In [305]: dict1 = {} # method 2 of dictionaru creat
ion
dict1['A'] = 'Apple'
dict1['B'] = 'Banana' # The dictionary keys must be
unique
dict1['B'] = 'Ball' # For duplicate assignments for a key, the key will retain
the last assignment
dict1['c'] = 'Cat'
print dict1
{'A': 'Apple', 'c': 'Cat', 'B': 'Ball'}
Indexing the dictionaries
In [306]: print "There is one ", dict1['c'], " in the hall"
There is one Cat in the hall
In [308]: print dict1['C'] # case sensitivity
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
KeyError Traceback (most recent call last)
<ipython‐input‐308‐70c4ffc7a92c> in <module>()
‐‐‐‐> 1 print dict1['C']
KeyError: 'C'
In [309]: 'C' in dict1 # membership check
Out[309]: False
In [310]: 'c' in dict1 # membership check
Out[310]: True
In [311]: dict1.values()
Out[311]: ['Apple', 'Cat', 'Ball']
In [312]: dict1.keys()
Out[312]: ['A', 'c', 'B']
Interview Question : what is the type of the result of dictionary.items()?
In [313]: dict1.items()
Out[313]: [('A', 'Apple'), ('c', 'Cat'), ('B', 'Ball')]
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 116/338
13/11/2016 python Basic and Intermediate Level Modules
In [314]: dict1
Out[314]: {'A': 'Apple', 'B': 'Ball', 'c': 'Cat'}
Editing an existing dictionary
In [315]: dict1['ac'] = 'Air Conditioner'
In [316]: dict1['z'] = 'Zombie'
In [317]: print dict1
{'A': 'Apple', 'c': 'Cat', 'B': 'Ball', 'ac': 'Air Conditioner', 'z': 'Zombi
e'}
In [318]: if 'ac' in dict1:
print 'There is ', dict1['ac']
There is Air Conditioner
In [319]: dict1.get('B')
Out[319]: 'Ball'
In [320]: dict1.get('b') # Doesn't raise any error, in the absence of specified key
In [321]: dict1.get('b', 'xxx') # if not present, returns the specified value
Out[321]: 'xxx'
iterations on dictionaries
In [322]: [i for i in dict1.items()]
Out[322]: [('A', 'Apple'),
('c', 'Cat'),
('B', 'Ball'),
('ac', 'Air Conditioner'),
('z', 'Zombie')]
In [323]: [i for i in dict1.keys()]
Out[323]: ['A', 'c', 'B', 'ac', 'z']
In [324]: [i for i in dict1.values()]
Out[324]: ['Apple', 'Cat', 'Ball', 'Air Conditioner', 'Zombie']
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 117/338
13/11/2016 python Basic and Intermediate Level Modules
In [325]: [i for i in dict1] # In loops, dict1 means dict1.keys() by default
Out[325]: ['A', 'c', 'B', 'ac', 'z']
NOTE: By default, iterating over a dictionary takes place on keys() only
String Formatting with dictionaries
In [327]: cricket ={'players': 'Batsmen and Bowlers', 'count': 11}
print cricket
{'count': 11, 'players': 'Batsmen and Bowlers'}
In [328]: cricket['players']
Out[328]: 'Batsmen and Bowlers'
In [329]: sentence = "The %(players)s in cricket team are %(count)d in number!"%cricket
print sentence
The Batsmen and Bowlers in cricket team are 11 in number!
In [330]: sentence = "The %(players)r in cricket team are %(count)r in number!"%cricket
print sentence
The 'Batsmen and Bowlers' in cricket team are 11 in number!
In [336]: sentence = "The %(0)r in cricket team are %(1)r in number!"%cricket.items()
print sentence
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐336‐766646641dec> in <module>()
‐‐‐‐> 1 sentence = "The %(0)r in cricket team are %(1)r in number!"%cricket.i
tems()
2
3 print sentence
TypeError: list indices must be integers, not str
NOTE: Dictionaries can't be indexed using positions
In [337]: cricket.items()
Out[337]: [('count', 11), ('players', 'Batsmen and Bowlers')]
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 118/338
13/11/2016 python Basic and Intermediate Level Modules
In [339]: sentence = "The %s in cricket team are %d in number!"%cricket.items()[0]
print sentence
The count in cricket team are 11 in number!
In [340]: sentence = "The %r in cricket team are %r in number!"%cricket.items()[0]
print sentence
The 'count' in cricket team are 11 in number!
In [347]: for i in range(len(cricket.items())):
tmp = cricket.items()[i]
print "The %r in cricket team are %r in number!"%tmp
The 'count' in cricket team are 11 in number!
The 'players' in cricket team are 'Batsmen and Bowlers' in number!
But, there is logical error
In [348]: (cricket['players'], cricket['count'])
Out[348]: ('Batsmen and Bowlers', 11)
In [349]: print "The %r in cricket team are %r in number!"%(cricket['players'],
cricket['count'])
The 'Batsmen and Bowlers' in cricket team are 11 in number!
In [351]: dict1.clear() # results in empty dictionary object
In [352]: dict1
Out[352]: {}
In [353]: del dict1 # deletes the object
In [354]: dict1
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
NameError Traceback (most recent call last)
<ipython‐input‐354‐8239e7494a4a> in <module>()
‐‐‐‐> 1 dict1
NameError: name 'dict1' is not defined
dictonary keys should be immutable
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 119/338
13/11/2016 python Basic and Intermediate Level Modules
Interview Question : what is the result of the below statement:
dict1 = {[1,2,3]: 'numbers'}
In [355]: dict1 = {[1,2,3]: 'numbers'}
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐355‐b12b39d823ae> in <module>()
‐‐‐‐> 1 dict1 = {[1,2,3]: 'numbers'}
TypeError: unhashable type: 'list'
In [356]: dict1 = {(1,2,3): 'numbers'} #possible, as tuple is immutable
In [357]: dict1 = {"1,2,3": 'numbers'} # possible, as string is immutable
In [358]: dict1 = {123: 'numbers'} # possible, as int is immutable
In [359]: dict1
Out[359]: {123: 'numbers'}
In [360]: dict1 = {{1,2,3}: 'numbers'} # Not possible, as set is mutable
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐360‐7755ecdb2543> in <module>()
‐‐‐‐> 1 dict1 = {{1,2,3}: 'numbers'} # Not possible, as set is mutable
TypeError: unhashable type: 'set'
In [361]: dict1 = {frozenset({1,2,3}): 'numbers'} # possible, as frozen set is immutab
le
In [362]: dict1
Out[362]: {frozenset({1, 2, 3}): 'numbers'}
In [363]: dict1 = {3: 'numbers'} # on integers
In [364]: dict1 = {3.333: 'numbers'} # on floats
In [365]: dict1 = {True: 'numbers'} # on booleans
Interview Question : what is the result of dict1 = {True: 'numbers', 1: 'one', 2.0: 'two', 3.333: 'three'}
In [366]: dict1 = {True: 'numbers', 1: 'one', 2.0: 'two', 2.0: '2.0', 3.333: 'three'}
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 120/338
13/11/2016 python Basic and Intermediate Level Modules
In [367]: dict1
Out[367]: {True: 'one', 2.0: '2.0', 3.333: 'three'}
NOTE: As 'True' is a python object, it is preferred.
COPY in dictionaries
In [368]: dictHardCopy = dict1 # Hard COPY (assignment operation)
In [369]: dictCopy = dict1.copy() # soft COPY
In [370]: print dict1, '\n', dictHardCopy, '\n', dictCopy
{True: 'one', 2.0: '2.0', 3.333: 'three'}
{True: 'one', 2.0: '2.0', 3.333: 'three'}
{True: 'one', 2.0: '2.0', 3.333: 'three'}
In [371]: dict1 == dictHardCopy == dictCopy
Out[371]: True
In [372]: dict1 is dictHardCopy is dictCopy
Out[372]: False
In [373]: dictHardCopy[3.333] = '3333333' # updating the key, not position
In [374]: dictCopy[2.0] = '2222222' # indexing is done with key, and not index here
In [375]: print dict1, '\n', dictHardCopy, '\n', dictCopy
{True: 'one', 2.0: '2.0', 3.333: '3333333'}
{True: 'one', 2.0: '2.0', 3.333: '3333333'}
{True: 'one', 2.0: '2222222', 3.333: 'three'}
In [382]: mDict = {True: 'one', 3.333: {True: 'one', 3.333: {True: 'one', 3.333:
'three'} } }
In [383]: mdictCopy = mDict.copy() # soft COPY
In [384]: mDict[3.333][3.333][3.333]
Out[384]: 'three'
In [385]: mDict[3.333][3.333][3.333] = 9999
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 121/338
13/11/2016 python Basic and Intermediate Level Modules
In [386]: print mDict, '\n', mdictCopy
{True: 'one', 3.333: {True: 'one', 3.333: {True: 'one', 3.333: 9999}}}
{True: 'one', 3.333: {True: 'one', 3.333: {True: 'one', 3.333: 9999}}}
In [387]: import copy
mDictDeepCopy = copy.deepcopy(mDict)
In [388]: print mDict, '\n', mDictDeepCopy
{True: 'one', 3.333: {True: 'one', 3.333: {True: 'one', 3.333: 9999}}}
{True: 'one', 3.333: {True: 'one', 3.333: {True: 'one', 3.333: 9999}}}
In [391]: mDict[3.333][3.333][True]
Out[391]: 'one'
In [392]: mDict[3.333][3.333][1] #Observe that both are resulting the same.
Out[392]: 'one'
In [393]: mDict[3.333][3.333][True] = 1111
In [394]: print mDict, '\n', mDictDeepCopy
{True: 'one', 3.333: {True: 'one', 3.333: {True: 1111, 3.333: 9999}}}
{True: 'one', 3.333: {True: 'one', 3.333: {True: 'one', 3.333: 9999}}}
In [395]: sorted(mDict)
Out[395]: [True, 3.333]
In [396]: sorted(mDict.keys())
Out[396]: [True, 3.333]
In [397]: sorted(mDict.values())
Out[397]: [{True: 'one', 3.333: {True: 1111, 3.333: 9999}}, 'one']
In [398]: sorted(mDict.items())
Out[398]: [(True, 'one'), (3.333, {True: 'one', 3.333: {True: 1111, 3.333: 9999}})]
In [400]: fruits = {'a': 'apple', 'b': 'banana', 'd': 'donut'} # observe the common keys
in fruits and countries
countries = {'a': 'america', 'b': 'bahamas', 'c':'canada'}
In [401]: print fruits
{'a': 'apple', 'b': 'banana', 'd': 'donut'}
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 122/338
13/11/2016 python Basic and Intermediate Level Modules
In [402]: fruits.update(countries)
In [403]: print fruits
{'a': 'america', 'c': 'canada', 'b': 'bahamas', 'd': 'donut'}
In [404]: fruits = {'a': 'apple', 'b': 'banana', 'd': 'donut'} # re‐initializing
In [405]: print countries
{'a': 'america', 'c': 'canada', 'b': 'bahamas'}
In [406]: countries.update(fruits)
print countries # observe that as there is no key 'c' in fruits, i
t is not updated
{'a': 'apple', 'c': 'canada', 'b': 'banana', 'd': 'donut'}
creating dictionaries from lists
In [407]: countries = ['India', 'US', 'UK', 'Germany']
capitals = ['New Delhi', 'Washington', 'London', 'Berlin']
In [408]: countriesNcaptitals = zip(countries, capitals) # zip() builtin function; ret
urns list of tuples
print countriesNcaptitals
print type(countriesNcaptitals)
[('India', 'New Delhi'), ('US', 'Washington'), ('UK', 'London'), ('Germany',
'Berlin')]
<type 'list'>
Interview Question : How to create a list of tuples?
Ans: Using zip, map
In [409]: cncDictionary = dict(countriesNcaptitals) # dict() builtin function to create
dictionary
print type(cncDictionary)
print cncDictionary
<type 'dict'>
{'Germany': 'Berlin', 'India': 'New Delhi', 'UK': 'London', 'US': 'Washingto
n'}
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 123/338
13/11/2016 python Basic and Intermediate Level Modules
In [410]: dict(zip(['India', 'US', 'UK', 'Germany'], ['New Delhi', 'Washington', 'Londo
n', 'Berlin']))
Out[410]: {'Germany': 'Berlin', 'India': 'New Delhi', 'UK': 'London', 'US': 'Washingto
n'}
In [411]: d1 = {'a': 1, 'b': 2, 'c': 3}
d2 = {'a': 1, 'b': 2, 'c': 3}
cmp(d1,d2)
Out[411]: 0
In [412]: d2['d'] = 123;
print d2
{'a': 1, 'c': 3, 'b': 2, 'd': 123}
In [413]: cmp(d1, d2)
Out[413]: ‐1
In [414]: d1['d'] = '123'
d1['e'] = '345'
cmp(d1,d2)
Out[414]: 1
In [415]: len(d1), len(d2)
Out[415]: (5, 4)
In [416]: print d1
{'a': 1, 'c': 3, 'b': 2, 'e': '345', 'd': '123'}
In [417]: d4 ={}
d4.fromkeys(d1) # to extract the keys of d1, and place them for d4
Out[417]: {'a': None, 'b': None, 'c': None, 'd': None, 'e': None}
In [418]: d5 ={}
d5.fromkeys(d1, 'Python') # To place a default value, instead of None
Out[418]: {'a': 'Python', 'b': 'Python', 'c': 'Python', 'd': 'Python', 'e': 'Python'}
NOTE: dictionary Values can't be extracted in the same way
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 124/338
13/11/2016 python Basic and Intermediate Level Modules
In [419]: print dir(d1)
['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc
__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__
gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__
ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__',
'__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy',
'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalue
s', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values', 'viewitems',
'viewkeys', 'viewvalues']
In [420]: print d1
{'a': 1, 'c': 3, 'b': 2, 'e': '345', 'd': '123'}
In [421]: d1.get('a')
Out[421]: 1
In [422]: d1.get('A')
In [423]: d1.get('A', 'Not present')
Out[423]: 'Not present'
In [424]: d1.has_key('a')
Out[424]: True
In [425]: d1.has_key('A')
Out[425]: False
Interview Question: what is the difference between dictionary attributes: pop() and popitem()
Assignment : Write a script to take the names of our five friends in a list, and their designations in a separate
list. ... Then, create a dictionary, containing their name, designation pairs
Assignment : Write a script to get the letter frequency from a given sentence. Display the top three most
occurred letters
In [426]: d1 = {'a': 1, 'b': 2, 'c': 3, 'd': '123', 'e': '345'}
In [427]: d1.setdefault('a', None) # works same as indexing a key, when key is present
Out[427]: 1
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 125/338
13/11/2016 python Basic and Intermediate Level Modules
In [428]: d1
Out[428]: {'a': 1, 'b': 2, 'c': 3, 'd': '123', 'e': '345'}
In [429]: d1.setdefault('A', None) # works same as indexing a key, when key is present
In [430]: d1
Out[430]: {'A': None, 'a': 1, 'b': 2, 'c': 3, 'd': '123', 'e': '345'}
In [431]: d1.setdefault('A', 'not present') # As 'A' is present, None will be returned.
In [432]: d1
Out[432]: {'A': None, 'a': 1, 'b': 2, 'c': 3, 'd': '123', 'e': '345'}
In [433]: d1.setdefault('B', 'not present')
Out[433]: 'not present'
In [434]: d1
Out[434]: {'A': None, 'B': 'not present', 'a': 1, 'b': 2, 'c': 3, 'd': '123', 'e': '34
5'}
In [435]: d1.setdefault('B', 'someThing')
Out[435]: 'not present'
In [436]: d1
Out[436]: {'A': None, 'B': 'not present', 'a': 1, 'b': 2, 'c': 3, 'd': '123', 'e': '34
5'}
In [437]: d1.values() # results a list
Out[437]: [1, None, 3, 2, '345', '123', 'not present']
In [438]: print type(d1.values())
<type 'list'>
In [439]: d1.viewvalues() # results a dict_item
Out[439]: dict_values([1, None, 3, 2, '345', '123', 'not present'])
In [440]: print type(d1.viewvalues())
<type 'dict_values'>
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 126/338
13/11/2016 python Basic and Intermediate Level Modules
In [441]: d1.items()
Out[441]: [('a', 1),
('A', None),
('c', 3),
('b', 2),
('e', '345'),
('d', '123'),
('B', 'not present')]
In [442]: d1.viewitems()
Out[442]: dict_items([('a', 1), ('A', None), ('c', 3), ('b', 2), ('e', '345'), ('d', '1
23'), ('B', 'not present')])
In [443]: dictContent = d1.iteritems() # returns items as a generator; need to iterate
with next() to get the items
print type(dictContent)
<type 'dictionary‐itemiterator'>
In [444]: print dictContent
<dictionary‐itemiterator object at 0x0414F8A0>
In [445]: print dictContent.next()
('a', 1)
d1.iterkeys() and d1.itervalues() will work in the same way.
In [446]: d1= {True: 'one', 2: '2222', 3: 'three', 'b': 'ball'}
In [447]: print d1.pop(2) # 2 here is key, not position
2222
In [448]: print d1.pop()
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐448‐16d02b4d0b6a> in <module>()
‐‐‐‐> 1 print d1.pop()
TypeError: pop expected at least 1 arguments, got 0
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 127/338
13/11/2016 python Basic and Intermediate Level Modules
In [449]: print d1.pop('abcd')
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
KeyError Traceback (most recent call last)
<ipython‐input‐449‐6973f3cda490> in <module>()
‐‐‐‐> 1 print d1.pop('abcd')
KeyError: 'abcd'
In [450]: print d1.pop('abcd', None) # returns None, if the key is not present
None
In [451]: print d1.pop('abcd', "No Such Key") # To return default statement, in the abse
nce of key
No Such Key
In [49]: d1 = {True: 'one', 2: '2222', 3: 'three', 'b': 'ball'}
In [50]: key,value = d1.popitem() # deletes a random key‐pair and retuns them
print key, value
True one
In [51]: d1.popitem()
Out[51]: (2, '2222')
In [52]: key,value = d1.popitem()
print key,value
3 three
In [53]: key,value = d1.popitem(); print key,value
b ball
In [54]: key,value = d1.popitem(); print key,value
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
KeyError Traceback (most recent call last)
<ipython‐input‐54‐b91033ef2679> in <module>()
‐‐‐‐> 1 key,value = d1.popitem(); print key,value
KeyError: 'popitem(): dictionary is empty'
In [55]: d = {'a':1, 'b':2}
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 128/338
13/11/2016 python Basic and Intermediate Level Modules
In [56]: d.get('a', 34) # As key 'a' is present, it is resulting in corresponding val
ue
Out[56]: 1
In [57]: d.get('z', 34) # In the absence of key 'z', it results the second argument
Out[57]: 34
In [58]: print d # Observe that 'z' is not created
{'a': 1, 'b': 2}
In [59]: d.setdefault('z', 34)
Out[59]: 34
In [60]: print d # Observe that 'z' is created
{'a': 1, 'b': 2, 'z': 34}
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 129/338
13/11/2016 python Basic and Intermediate Level Modules
In [5]: # characterFrequencyAnalysis.py
"""
Purpose: To count the number of times, each character occurred in the
sentence.
Output: Each character and its occurrence count, as a pair.
"""
#sentence = "It always seem impossible, until it is achieved!"
sentence = raw_input("Enter a Quote: ")
count = {} # empty dictionary
for character in sentence:
count[character] = count.get(character, 0) + 1
print "character: occurrenceFrequency \n"
#print count
#for key,value in count.items():
# print key, value
for item in count.items():
print item
#for index, item in enumerate(count.items()):
# print index, item
Enter a Quote: This is right time to re‐concentrate my energies, to achieve s
uccess
character: occurrenceFrequency
('a', 2)
(' ', 10)
('c', 5)
('e', 10)
('g', 2)
('i', 6)
('h', 3)
('‐', 1)
('m', 2)
(',', 1)
('o', 3)
('n', 3)
('s', 6)
('r', 4)
('u', 1)
('T', 1)
('v', 1)
('y', 1)
('t', 6)
Assignment : In this characterFrequencyAnalysis.py example, try to display first three most frequently
occurred characters
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 130/338
13/11/2016 python Basic and Intermediate Level Modules
Memoization
To store the values which are already compiled, in cache, to optimize the time consumption
Interview Question : What is memoization. How to achieve it in dictionaries?
In [8]: alreadyknown = {0: 0, 1: 1} # Memoization
def fib(n):
if n not in alreadyknown:
new_value = fib(n‐1) + fib(n‐2)
alreadyknown[n] = new_value
return alreadyknown[n]
print "fib(20) = ", fib(20)
# fib(20)
#alreadyknown[20] = fib(19) + fib(18)
fib(20) = 6765
Ordered Dictionary
In [61]: d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2} # regular unsorted dict
ionary
print d
{'orange': 2, 'pear': 1, 'banana': 3, 'apple': 4}
In [62]: import collections
In [63]: collections.OrderedDict({'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2})
Out[63]: OrderedDict([('orange', 2), ('pear', 1), ('banana', 3), ('apple', 4)])
In [64]: collections.OrderedDict(sorted(d.items(), key=lambda t: t[0])) # Sorted by key
[(k1,v1),(k2,v2)]
Out[64]: OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
In [11]: collections.OrderedDict(sorted(d.items(), key=lambda t: t[1])) # Sorted by Val
ue
Out[11]: OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])
Interview Question : How to sort a dictionary based on the length of the key?
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 131/338
13/11/2016 python Basic and Intermediate Level Modules
In [12]: collections.OrderedDict(sorted(d.items(), key=lambda t: len(t[0]))) # Sorted b
y length of key .
Out[12]: OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)])
In [13]: collections.OrderedDict(sorted(d.items(), key=lambda t: len(str(t[1])))) # Sor
ted by length of Value; Observe no change
Out[13]: OrderedDict([('orange', 2), ('pear', 1), ('banana', 3), ('apple', 4)])
In [14]: collections.OrderedDict(d.items())
Out[14]: OrderedDict([('orange', 2), ('pear', 1), ('banana', 3), ('apple', 4)])
Assignment : Use collections.OrdererDict to get an ordered dictionary. Try to do some example
5.0 Functions
To reduce the code duplication for repetive logic
Modularizing the complex problem, into simpler pieces.
For better code reusage
Information Hiding
Functions in Python are called Firstclass citizens.
Function object have equal status as other objects
Functions too, can be assigned to variables, stored in collections (list, tuple, dictionary, set)
or can be passed as arguments.
Functions are of two types:
1. Builtfunctions
2. userdefined functions
Syntax:
def functionName(argument1, arguments2, ... ):
statement1
statement2
....
return expression/Value # return is optional, None object goes when return is
not present.
Functions without input arguments
In [15]: def helloWorld(): # function definition
print "Hello World!!!"
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 132/338
13/11/2016 python Basic and Intermediate Level Modules
In [16]: type(helloWorld)
Out[16]: function
In [17]: helloWorld() # function call
Hello World!!!
In [18]: hw = helloWorld() # assigning the result of function call
print type(hw), hw
Hello World!!!
<type 'NoneType'> None
NOTE: Observe that the result(assignment) is NoneType beacuse the default return is NoneType.
Problem : write a function to get all the team members for a new project in runtime, and display them along
with their count.
In [19]: def teamMembers():
team = raw_input('Enter the names of team members: ')
print team, type(team)
teamMembers() # function call
Enter the names of team members: Shoban, Shankar, Naseer
Shoban, Shankar, Naseer <type 'str'>
In [20]: def teamMembers():
team = raw_input('Enter the names of team members: ')
print team, type(team)
print len(team)
print team.split(',')
print "There are ", len(team.split(',')), " members in the team"
teamMembers() # function call
Enter the names of team members: Shoban, Shankar, Naseer Shiek
Shoban, Shankar, Naseer Shiek <type 'str'>
29
['Shoban', ' Shankar', ' Naseer Shiek']
There are 3 members in the team
Functions with inputs
Problem : Write a script to print the greater number, among two numbers
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 133/338
13/11/2016 python Basic and Intermediate Level Modules
In [21]: def greaterNumber(a,b):
if a > b:
print "%d is greater than %d"%(a,b)
elif a < b:
print "%d is lesser than %d"%(a,b)
else:
print "%d is equal to %d"%(a,b)
greaterNumber(‐32, ‐12)
greaterNumber(32, ‐12)
greaterNumber(‐32, 12)
‐32 is lesser than ‐12
32 is greater than ‐12
‐32 is lesser than 12
Problem : Displaying a given name
In [22]: def displayName(name):
print "The name of the candidate is %r"%(name)
displayName('Naseer')
The name of the candidate is 'Naseer'
Scope: Local and Global Variables
In [23]: a = 10 # 'a' is an integer ‐ immutable
print "Initially, before going to function, a = %d"%(a)
def localEx(a):
print "In localEx() function, a = %d"%(a)
a= 5
print "In localEx() function, a = %d"%(a)
localEx(a)
print "Outside: a = %d"%(a)
Initially, before going to function, a = 10
In localEx() function, a = 10
In localEx() function, a = 5
Outside: a = 10
Inference: Changes made to the variable within function, does affect outside it
Interview Question : Explain the difference between global and local values, with an example?
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 134/338
13/11/2016 python Basic and Intermediate Level Modules
global : It is a keyword to reflect the local changes (within the function) to the global level
In [24]: global a # global declaration
a = 10
def globalEx(): # Observe that 'a' is not passed as input
global a # global declaration
print "In globalEx() function, a = %d"%(a)
a= 5
print "In globalEx() function, a = %d"%(a)
globalEx()
print "Outside: a = %d"%(a)
In globalEx() function, a = 10
In globalEx() function, a = 5
Outside: a = 5
In [28]: myDict = {'a': 'Apple', 'b': 'Bat'} # 'myDict' is dictionary ‐ mutable
print "Initially, before going to function, myDict =", myDict
def localEx(a):
print "In localEx() function, myDict =", myDict
myDict['z'] = 'ZOO'
print "In localEx() function, myDict =", myDict
localEx(a)
print "Outside: myDict =", myDict
Initially, before going to function, myDict = {'a': 'Apple', 'b': 'Bat'}
In localEx() function, myDict = {'a': 'Apple', 'b': 'Bat'}
In localEx() function, myDict = {'a': 'Apple', 'b': 'Bat', 'z': 'ZOO'}
Outside: myDict = {'a': 'Apple', 'b': 'Bat', 'z': 'ZOO'}
Inference: Changes made to the object within function, gets effected outside the function, if the object is of
mutable type; else in immutable objects no change is reflected
Default and Keyword arguments
In [2]: def hello(name = "World!!!"): # name is having a default input argument
print "Hello ", name
In [3]: hello() # In the absence of input argument, It will display th
e default input argument
Hello World!!!
In [4]: hello('Shoban')
Hello Shoban
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 135/338
13/11/2016 python Basic and Intermediate Level Modules
In [5]: hello(name = 'Shoban Babu!!!')
Hello Shoban Babu!!!
In [6]: def cricket(balls = 3, bats = 2):
print "There are %d balls and %d bats"%(balls, bats)
In [7]: cricket.func_defaults
Out[7]: (3, 2)
In [8]: cricket()
There are 3 balls and 2 bats
In [9]: cricket(4,5) # taken based on position
There are 4 balls and 5 bats
In [10]: cricket(balls = 5, bats= 4) # taken based on assignment
There are 5 balls and 4 bats
In [11]: cricket(bats = 5, balls= 40) # taken based on assignment
There are 40 balls and 5 bats
In [335]: def nTimesDisplay(message, noOfTimes = 3):
print message*noOfTimes
Here, as only one argument is default, the other should be given mandatorily.
NOTE: The default arguments must be placed in the last in the function definition.
In [14]: nTimesDisplay('Python ')
Python Python Python
In [15]: nTimesDisplay('Python ', 5)
Python Python Python Python Python
In [16]: nTimesDisplay(5,'Python ') # It identified based on the data type
Python Python Python Python Python
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 136/338
13/11/2016 python Basic and Intermediate Level Modules
In [337]: nTimesDisplay(5.0,'Python ')
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐337‐9cea01eb6299> in <module>()
‐‐‐‐> 1 nTimesDisplay(5.0,'Python ')
<ipython‐input‐335‐dcd91946b6b5> in nTimesDisplay(message, noOfTimes)
1 def nTimesDisplay(message, noOfTimes = 3):
‐‐‐‐> 2 print message*noOfTimes
TypeError: can't multiply sequence by non‐int of type 'float'
In [17]: def funcExpressions(a,b = 12, c = 123):
print "The value of a is %d"%(a)
print "The value of b is %d"%(b)
print "The value of c is %d"%(c)
In [18]: funcExpressions(23)
The value of a is 23
The value of b is 12
The value of c is 123
In [19]: funcExpressions(23, c= 999)
The value of a is 23
The value of b is 12
The value of c is 999
In [20]: funcExpressions(c = 123, a = 234)
The value of a is 234
The value of b is 12
The value of c is 123
return statement
By default, userdefined functions will return 'None'
In [21]: def evenOddTest(a):
result = a % 2
if result == 0:
return '%d is an even number'%(a)
else:
return '%d is an odd number'%(a)
In [22]: evenOddTest(223)
Out[22]: '223 is an odd number'
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 137/338
13/11/2016 python Basic and Intermediate Level Modules
In [23]: print evenOddTest(223)
223 is an odd number
In [24]: eot = evenOddTest(223)
print eot, type(eot)
223 is an odd number <type 'str'>
DocStrings
Essential for specifying something about the function
Enclosed within ''' ''' or """ """
Docstrings are different from comments
In [25]: def evenOddTest(a):
'''
Purpose: To validate the even‐ness or odd‐ness of a given integer.
Input: Variable a
Input Type: Integer
Output: result statement
Output Type: String
'''
result = a%2 # For even values, result is zero
# checking value equivalence with result
if result == 0:
return '%d is an even number'%(a)
else:
return '%d is an odd number'%(a)
In [26]: print type(evenOddTest)
<type 'function'>
In [27]: print evenOddTest.func_doc
Purpose: To validate the even‐ness or odd‐ness of a given integer.
Input: Variable a
Input Type: Integer
Output: result statement
Output Type: String
In [28]: print dir(evenOddTest)
['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delat
tr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '_
_globals__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__
reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str_
_', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_d
ict', 'func_doc', 'func_globals', 'func_name']
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 138/338
13/11/2016 python Basic and Intermediate Level Modules
In [29]: evenOddTest.func_name
Out[29]: 'evenOddTest'
In [31]: print evenOddTest.func_defaults # prints None, as there are no default arg
uments defined
None
Variable Arguments (*args and **kwargs)
In [33]: #!/usr/bin/python
'''
Purpose: Demonstration of the usage of *args and **kwargs
*args stores variables in tuple
**kwargs stores variables in dictionaries
'''
def foo(firstArg, *args, **kwargs):
print 'Necessary argument is ', firstArg
print 'args = ', args
print 'type(args) is', type(args)
if args:
for arg in args:
print arg
print 'kwargs = ', kwargs
print 'type(kwargs) is', type(kwargs)
if kwargs:
print "The keyword arguments are\n",
# for kwarg in kwargs:
# print kwarg
for k,v in kwargs.items():
print '%15r ‐‐> %10r'%(k,v)
In [34]: foo(321)
Necessary argument is 321
args = ()
type(args) is <type 'tuple'>
kwargs = {}
type(kwargs) is <type 'dict'>
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 139/338
13/11/2016 python Basic and Intermediate Level Modules
In [35]: foo(1,2,3,4)
Necessary argument is 1
args = (2, 3, 4)
type(args) is <type 'tuple'>
2
3
4
kwargs = {}
type(kwargs) is <type 'dict'>
In [36]: foo(99,22.0, True, [12,34, 56])
Necessary argument is 99
args = (22.0, True, [12, 34, 56])
type(args) is <type 'tuple'>
22.0
True
[12, 34, 56]
kwargs = {}
type(kwargs) is <type 'dict'>
In [37]: foo(32, 56, 32, (2, [34, (2.3, 99, 0)]))
Necessary argument is 32
args = (56, 32, (2, [34, (2.3, 99, 0)]))
type(args) is <type 'tuple'>
56
32
(2, [34, (2.3, 99, 0)])
kwargs = {}
type(kwargs) is <type 'dict'>
In [38]: foo(2.0, a = 1, b=2, c=3)
Necessary argument is 2.0
args = ()
type(args) is <type 'tuple'>
kwargs = {'a': 1, 'c': 3, 'b': 2}
type(kwargs) is <type 'dict'>
The keyword arguments are
'a' ‐‐> 1
'c' ‐‐> 3
'b' ‐‐> 2
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 140/338
13/11/2016 python Basic and Intermediate Level Modules
In [39]: foo(2, 2.0, a = 1, b=2, c=3)
Necessary argument is 2
args = (2.0,)
type(args) is <type 'tuple'>
2.0
kwargs = {'a': 1, 'c': 3, 'b': 2}
type(kwargs) is <type 'dict'>
The keyword arguments are
'a' ‐‐> 1
'c' ‐‐> 3
'b' ‐‐> 2
In [40]: foo('a', 1, None, a = 1, b = '2', c = 3)
Necessary argument is a
args = (1, None)
type(args) is <type 'tuple'>
1
None
kwargs = {'a': 1, 'c': 3, 'b': '2'}
type(kwargs) is <type 'dict'>
The keyword arguments are
'a' ‐‐> 1
'c' ‐‐> 3
'b' ‐‐> '2'
In [41]: foo(123, courseName = 'Python', currentStatus = '40% completed', studentList =
['Michel', 'Naseer', 'Johson', 'Shoban'])
Necessary argument is 123
args = ()
type(args) is <type 'tuple'>
kwargs = {'courseName': 'Python', 'currentStatus': '40% completed', 'student
List': ['Michel', 'Naseer', 'Johson', 'Shoban']}
type(kwargs) is <type 'dict'>
The keyword arguments are
'courseName' ‐‐> 'Python'
'currentStatus' ‐‐> '40% completed'
'studentList' ‐‐> ['Michel', 'Naseer', 'Johson', 'Shoban']
Lambda
In [43]: def printSquares(x):
for i in range(x):
print i**2,
printSquares(7)
0 1 4 9 16 25 36
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 141/338
13/11/2016 python Basic and Intermediate Level Modules
In [44]: [lambda x:x**2 for x in range(7)]
Out[44]: [<function __main__.<lambda>>,
<function __main__.<lambda>>,
<function __main__.<lambda>>,
<function __main__.<lambda>>,
<function __main__.<lambda>>,
<function __main__.<lambda>>,
<function __main__.<lambda>>]
In [45]: map(lambda x:x**2, range(7)) # map() builtin function, that takes function a
nd collection as input
Out[45]: [0, 1, 4, 9, 16, 25, 36]
In [46]: filter(lambda x:x%2 == 0, range(12)) # Observe that filter() takes a conditi
on, unlike map()
Out[46]: [0, 2, 4, 6, 8, 10]
Assignment : Using the above written logic, write evenOddTest function within the map() and get the even
values between 23 and 97
map()
In [47]: def double(number):
return number*2 # experession isn't returned, but the result is
In [48]: map(double, range(45, 56))
Out[48]: [90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110]
filter()
In [49]: def OddNessTest(number):
return number%2 != 0
In [50]: listOfValues = [12, 34, 56, 78, 923, 23]
In [51]: filter(OddNessTest, listOfValues)
Out[51]: [923, 23]
In [52]: map(OddNessTest, listOfValues)
Out[52]: [False, False, False, False, True, True]
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 142/338
13/11/2016 python Basic and Intermediate Level Modules
Interview Question : Write a function to highlist the vowels in the input string
5.5 filter
In [1]: def OddNessTest(number):
return number%2 != 0
In [2]: listOfValues = [12, 34, 56, 78, 923, 23]
Interview Question : What is the difference between map() and filter()?
In [3]: filter(OddNessTest, listOfValues)
Out[3]: [923, 23]
In [4]: map(OddNessTest, listOfValues)
Out[4]: [False, False, False, False, True, True]
Interview Question : Write a function to highlist the vowels in the input string
In [5]: def highlightVowels(string):
vowels = 'ae1ouAEIOU'
for i in string:
if i in vowels:
print i.upper(),
else:
print i.lower(),
highlightVowels('I will give my best to achieve my goal!')
I w i l l g i v E m y b E s t t O A c h i E v E m y g O A l !
In [6]: def highLightVowels(string):
newString = []
for ch in string:
if ch.lower() in 'aeiou':
newString.append(ch.upper())
else:
newString.append(ch.lower())
return ''.join(newString)
print highLightVowels('python programming language')
print highLightVowels('python programming language'.upper())
pythOn prOgrAmmIng lAngUAgE
pythOn prOgrAmmIng lAngUAgE
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 143/338
13/11/2016 python Basic and Intermediate Level Modules
Assignment : Do modifications to this logic, to remove the spaces between letters; not words
zip()
To pair the list given
Results in list of tuples
In [7]: zip('Python', 'Python')
Out[7]: [('P', 'P'), ('y', 'y'), ('t', 't'), ('h', 'h'), ('o', 'o'), ('n', 'n')]
In [8]: zip('python', xrange(len('python')))
Out[8]: [('p', 0), ('y', 1), ('t', 2), ('h', 3), ('o', 4), ('n', 5)]
In [9]: zip(xrange(len('python')), 'Python')
Out[9]: [(0, 'P'), (1, 'y'), (2, 't'), (3, 'h'), (4, 'o'), (5, 'n')]
In [10]: zip('Python')
Out[10]: [('P',), ('y',), ('t',), ('h',), ('o',), ('n',)]
In [11]: zip('Python', 'Python', 'python')
Out[11]: [('P', 'P', 'p'),
('y', 'y', 'y'),
('t', 't', 't'),
('h', 'h', 'h'),
('o', 'o', 'o'),
('n', 'n', 'n')]
Interview Question : What is the difference between map() and zip()?
In [12]: print map(None, range(10), range(12)) # None type function taken to pair th
e values in list
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9,
9), (None, 10), (None, 11)]
In [13]: print zip(range(10), range(12))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9,
9)]
NOTE: Observe that map() can handle lists of assymmetric lengths, whereas zip() can't
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 144/338
13/11/2016 python Basic and Intermediate Level Modules
reduce()
It accepts an iterator to process, but it's not an iterator itself. It returns a single result
In [14]: reduce( (lambda a, b: a * b), [1, 2, 3, 4] ) # results in 1*2*3*4
Out[14]: 24
Interview Question : what is the difference between map() and reduce()?
In [15]: map( (lambda a, b: a * b), [1, 2, 3, 4] )
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐15‐c4e63925bfeb> in <module>()
‐‐‐‐> 1 map( (lambda a, b: a * b), [1, 2, 3, 4] )
TypeError: <lambda>() takes exactly 2 arguments (1 given)
In [16]: map( (lambda a, b: a * b), [1, 2, 3, 4], [1, 2, 3, 4] )
Out[16]: [1, 4, 9, 16]
In [17]: reduce( (lambda a, b: a ** b), [1, 2, 3, 4] ) # results in 1**2**3**4; anyth
ing to the power of 1 results in 1
Out[17]: 1
In [18]: map( (lambda a, b: a ** b), [1, 2, 3, 4], [1, 2, 3, 4] )
Out[18]: [1, 4, 27, 256]
In [19]: reduce( (lambda a, b: a ** b), [2, 3, 4] ) # results in 2**3**4
Out[19]: 4096
Interview Question : Perform string concatenation using reduce()
In [20]: reduce((lambda a,b:a+b), ['python', 'programming'])
Out[20]: 'pythonprogramming'
In [21]: reduce((lambda a,b:a + ' ' + b), ['python', 'programming'])
Out[21]: 'python programming'
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 145/338
13/11/2016 python Basic and Intermediate Level Modules
In [22]: string = 'I am confident about my Success'
list = string.split(' ')
print list
['I', 'am', 'confident', 'about', 'my', 'Success']
In [23]: reduce(lambda a,b: a+b, list)
Out[23]: 'IamconfidentaboutmySuccess'
In [24]: reduce(lambda a,b: a + ' ' + b, list) # with spaces between words
Out[24]: 'I am confident about my Success'
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 146/338
13/11/2016 python Basic and Intermediate Level Modules
Assignment : Write a script with two functions, celsiusToFahrenheit() and fahrenheitToCelsius(). In runtime,
the user should be given choice to enter either Fahrenheit or Celcius; then use the functions to convert
correspondingly. Then, display the result from main function, using string formatting?
Assignment : Write three functions absolute(). Prompt the user to feed an integer (). The result should
mimick the functionality of builtin function abs()
ex:
In [1]: abs(9)
Out[1]: 9
In [2]: abs(‐9)
Out[2]: 9
In [3]: abs(0)
Out[3]: 0
In [4]: abs(2+3j)
Out[4]: 3.6055512754639896
Assignment : Write a function that validates and prints whether the runtime input given is palindrome or not.
Ex: 'otto'
'Evil is a deed as I live' Hint: ignore white‐space here.
Assignment : write a function that generates palindromes, for the given runtime input. There should be two
outputs, both for even and odd case. Ref : http://www.jimsabo.com/palindrome.html
(http://www.jimsabo.com/palindrome.html).
Assignment : Write a function to implement the caesar cipher, for the given input.
ex1: input ‐‐> 'Python'
output ‐‐> 'Qzuipo'
ex2: input ‐‐> 'One day, I will achieve my goal!'
output ‐> 'Pof!ebz‐!J!xjmm!bdijfwf!nz!hpbm"'
HINT: use chr() and ord() builtin functions
Assignment : Define a function histogram() that takes a list of integers and prints a histogram to the screen.
For example, histogram([2, 5, 7]) should print:
**
*****
*******
Assignment : Write a function to get the fibinocci series of numbers till 100; and another function to print the
corresponding number of astericks. Hint: 0, 1, 1, 2, 3, 5, 8, ...
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 147/338
13/11/2016 python Basic and Intermediate Level Modules
Output expected :
*
*
**
***
*****
********
...so on
Assignment : Write a function to calculate the factorial of a number.
Hint: factorial(4) = 4*3*2*1 = 24
Recursive functions
def funcName(<input paramaters>):
<some logic>
return funcName(<input parameters>)
Recursion is a programming technique in which a call to a function results in another call to that same
function. Iteration is calling an object, and moving over it.
Problem : Return the fibonacci series (0, 1, 1, 2, 3, 5, 8) using recursions
In [25]: def fib(n): # method 1 recursion
if n == 0:
return 0
elif n == 1:
return 1
else:
return fib(n‐1)+fib(n‐2)
print fib(20)
6765
In [26]: fib(5) # 5th element # fib(4)+fib(3)
# fib(4) ‐> fib(3)+fib(2)
# fib ...
Out[26]: 5
In [27]: fib(6) # 6th element
Out[27]: 8
Assignment : Using recursive functions, generate the fibonacci series and display all the series still a given
number
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 148/338
13/11/2016 python Basic and Intermediate Level Modules
Problem : Write a recursive function to get the factorial of a given number
In [28]: reduce((lambda x,y: x*y), xrange(1,12)) # method 2
Out[28]: 39916800
In [29]: def factorial(n): # method 3 recursion
if n == 1 or 0:
return 1
return n * factorial(n‐1)
factorial(12‐1)
Out[29]: 39916800
In [30]: factorial(5) # 5*3*2*1*1
Out[30]: 120
In [31]: def factorial(n): # same logic, but consolidated
# method 4 recursion
return 1 if n==0 else n*factorial(n‐1)
In [32]: factorial(12‐1)
Out[32]: 39916800
In [33]: def factorial(n): # same logic, but consolidated
# method 5 recursion
n = abs(n)
return 1 if n==0 else n*factorial(n‐1)
In [34]: factorial(11)
Out[34]: 39916800
In [35]: factorial(‐11)
Out[35]: 39916800
In [36]: def factorial(n): # method
6 recursion
if n == 0:
return 1
elif n <0:
return n*factorial(n+1)
else:
return n*factorial(n‐1)
In [37]: factorial(0)
Out[37]: 1
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 149/338
13/11/2016 python Basic and Intermediate Level Modules
In [38]: factorial(11)
Out[38]: 39916800
In [39]: factorial(‐11)
Out[39]: ‐39916800
Assignment : using timeit module, conclude which of the above factorial() functions, is faster?
Interview Question : write a recursive function to display the reverse of a given string, using recursive
function.
ex:'Python' > 'nohtyP'
In [40]: def stringReverse(string): # method 1
if string == '':
return ''
else:
return stringReverse(string[1:]) + string[0]
stringReverse('Python Programming')
Out[40]: 'gnimmargorP nohtyP'
In [41]: def stringReverse(string): # method 2
if string == '':
return ''
return string[‐1]+stringReverse(string[:‐1])
stringReverse('Python')
Out[41]: 'nohtyP'
Assignment : Modify this stringReverse() recursive function to result as below:
'Python Programming' > 'nohtyP gnimmargorP'
NOTE: We also know that string reversal is possible using slicing (str[::1]) and using builtin function
reversed()
Problem : Write a recursive function to display the sum of squares of whole numbers, till given number, n.
1**2 +2**2 + 3**2 + ...
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 150/338
13/11/2016 python Basic and Intermediate Level Modules
In [42]: def squareSum(n):
if n == 0:
return 0
else:
return pow(n,2) + squareSum(n‐1)
squareSum(4) # 0**2 + 1**2 + 2**2 + 3**2 + 4**2
Out[42]: 30
Assignmnet : Write a recursive function to compute the sum of first 'n' whole number
Hint : 10 > 10+9+8+ ......1+0
if n is 0, return 0
Assignment : Write a recursive function which displays the Pascal's triangle:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
HINT: use fibonacci series
Assignments (Interview Question): Implement a recursive function to multiply and divide 2 numbers
recursively using + and operators only.
Assignment : Write a recursive function to display first 50 prime numbers
Assignment : WAP to display the sum of digits of a number Hint: n//10, n%10
Problem : Create an infinite loop using recursive functions
In [43]: global noOfRecursions
noOfRecursions = 0
def loop(noOfRecursions): # Infinite loop
print 'Hi! I am in Loop '
global noOfRecursions
noOfRecursions+=1 # to get the count of number of recursions
occurred
print 'This is Loop %d'%noOfRecursions
return loop(noOfRecursions)
File "<ipython‐input‐43‐c4e39b05cf08>", line 3
def loop(noOfRecursions): # Infinite loop
SyntaxError: name 'noOfRecursions' is local and global
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 151/338
13/11/2016 python Basic and Intermediate Level Modules
In [44]: loop(noOfRecursions)
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
NameError Traceback (most recent call last)
<ipython‐input‐44‐479a6f6d0cf4> in <module>()
‐‐‐‐> 1 loop(noOfRecursions)
NameError: name 'loop' is not defined
In [45]: print noOfRecursions # It results the default value given before entering th
e function, as returns from subframes was halted.
0
Notice that in python, infinite loop will not run for infinite time. But, they gets halted after reaching the
maximum recursion depth.
Interview question : what is the maximum recursion depth of any python object? Does it differ for different
types of objects? Is it dependent on the machine being used?
Problem : Write a function to demonstrate the MUTUAL recursion between two functions
In [46]: # Infinite loop between these functions ‐‐‐ Mutual recursion
global noOfloops
noOfloops = 0
def func1():
print 'I am in function 1 .'
global noOfloops
noOfloops+=1
print noOfloops
return func2()
def func2():
print 'I am in function 2 .'
global noOfloops
noOfloops+=1
print noOfloops
return func1()
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 152/338
13/11/2016 python Basic and Intermediate Level Modules
In [47]: func1()
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 153/338
13/11/2016 python Basic and Intermediate Level Modules
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 154/338
13/11/2016 python Basic and Intermediate Level Modules
I am in function 1 .
1
I am in function 2 .
2
I am in function 1 .
3
I am in function 2 .
4
I am in function 1 .
5
I am in function 2 .
6
I am in function 1 .
7
I am in function 2 .
8
I am in function 1 .
9
I am in function 2 .
10
I am in function 1 .
11
I am in function 2 .
12
I am in function 1 .
13
I am in function 2 .
14
I am in function 1 .
15
I am in function 2 .
16
I am in function 1 .
17
I am in function 2 .
18
I am in function 1 .
19
I am in function 2 .
20
I am in function 1 .
21
I am in function 2 .
22
I am in function 1 .
23
I am in function 2 .
24
I am in function 1 .
25
I am in function 2 .
26
I am in function 1 .
27
I am in function 2 .
28
I am in function 1 .
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 155/338
13/11/2016 python Basic and Intermediate Level Modules
29
I am in function 2 .
30
I am in function 1 .
31
I am in function 2 .
32
I am in function 1 .
33
I am in function 2 .
34
I am in function 1 .
35
I am in function 2 .
36
I am in function 1 .
37
I am in function 2 .
38
I am in function 1 .
39
I am in function 2 .
40
I am in function 1 .
41
I am in function 2 .
42
I am in function 1 .
43
I am in function 2 .
44
I am in function 1 .
45
I am in function 2 .
46
I am in function 1 .
47
I am in function 2 .
48
I am in function 1 .
49
I am in function 2 .
50
I am in function 1 .
51
I am in function 2 .
52
I am in function 1 .
53
I am in function 2 .
54
I am in function 1 .
55
I am in function 2 .
56
I am in function 1 .
57
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 156/338
13/11/2016 python Basic and Intermediate Level Modules
I am in function 2 .
58
I am in function 1 .
59
I am in function 2 .
60
I am in function 1 .
61
I am in function 2 .
62
I am in function 1 .
63
I am in function 2 .
64
I am in function 1 .
65
I am in function 2 .
66
I am in function 1 .
67
I am in function 2 .
68
I am in function 1 .
69
I am in function 2 .
70
I am in function 1 .
71
I am in function 2 .
72
I am in function 1 .
73
I am in function 2 .
74
I am in function 1 .
75
I am in function 2 .
76
I am in function 1 .
77
I am in function 2 .
78
I am in function 1 .
79
I am in function 2 .
80
I am in function 1 .
81
I am in function 2 .
82
I am in function 1 .
83
I am in function 2 .
84
I am in function 1 .
85
I am in function 2 .
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 157/338
13/11/2016 python Basic and Intermediate Level Modules
86
I am in function 1 .
87
I am in function 2 .
88
I am in function 1 .
89
I am in function 2 .
90
I am in function 1 .
91
I am in function 2 .
92
I am in function 1 .
93
I am in function 2 .
94
I am in function 1 .
95
I am in function 2 .
96
I am in function 1 .
97
I am in function 2 .
98
I am in function 1 .
99
I am in function 2 .
100
I am in function 1 .
101
I am in function 2 .
102
I am in function 1 .
103
I am in function 2 .
104
I am in function 1 .
105
I am in function 2 .
106
I am in function 1 .
107
I am in function 2 .
108
I am in function 1 .
109
I am in function 2 .
110
I am in function 1 .
111
I am in function 2 .
112
I am in function 1 .
113
I am in function 2 .
114
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 158/338
13/11/2016 python Basic and Intermediate Level Modules
I am in function 1 .
115
I am in function 2 .
116
I am in function 1 .
117
I am in function 2 .
118
I am in function 1 .
119
I am in function 2 .
120
I am in function 1 .
121
I am in function 2 .
122
I am in function 1 .
123
I am in function 2 .
124
I am in function 1 .
125
I am in function 2 .
126
I am in function 1 .
127
I am in function 2 .
128
I am in function 1 .
129
I am in function 2 .
130
I am in function 1 .
131
I am in function 2 .
132
I am in function 1 .
133
I am in function 2 .
134
I am in function 1 .
135
I am in function 2 .
136
I am in function 1 .
137
I am in function 2 .
138
I am in function 1 .
139
I am in function 2 .
140
I am in function 1 .
141
I am in function 2 .
142
I am in function 1 .
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 159/338
13/11/2016 python Basic and Intermediate Level Modules
143
I am in function 2 .
144
I am in function 1 .
145
I am in function 2 .
146
I am in function 1 .
147
I am in function 2 .
148
I am in function 1 .
149
I am in function 2 .
150
I am in function 1 .
151
I am in function 2 .
152
I am in function 1 .
153
I am in function 2 .
154
I am in function 1 .
155
I am in function 2 .
156
I am in function 1 .
157
I am in function 2 .
158
I am in function 1 .
159
I am in function 2 .
160
I am in function 1 .
161
I am in function 2 .
162
I am in function 1 .
163
I am in function 2 .
164
I am in function 1 .
165
I am in function 2 .
166
I am in function 1 .
167
I am in function 2 .
168
I am in function 1 .
169
I am in function 2 .
170
I am in function 1 .
171
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 160/338
13/11/2016 python Basic and Intermediate Level Modules
I am in function 2 .
172
I am in function 1 .
173
I am in function 2 .
174
I am in function 1 .
175
I am in function 2 .
176
I am in function 1 .
177
I am in function 2 .
178
I am in function 1 .
179
I am in function 2 .
180
I am in function 1 .
181
I am in function 2 .
182
I am in function 1 .
183
I am in function 2 .
184
I am in function 1 .
185
I am in function 2 .
186
I am in function 1 .
187
I am in function 2 .
188
I am in function 1 .
189
I am in function 2 .
190
I am in function 1 .
191
I am in function 2 .
192
I am in function 1 .
193
I am in function 2 .
194
I am in function 1 .
195
I am in function 2 .
196
I am in function 1 .
197
I am in function 2 .
198
I am in function 1 .
199
I am in function 2 .
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 161/338
13/11/2016 python Basic and Intermediate Level Modules
200
I am in function 1 .
201
I am in function 2 .
202
I am in function 1 .
203
I am in function 2 .
204
I am in function 1 .
205
I am in function 2 .
206
I am in function 1 .
207
I am in function 2 .
208
I am in function 1 .
209
I am in function 2 .
210
I am in function 1 .
211
I am in function 2 .
212
I am in function 1 .
213
I am in function 2 .
214
I am in function 1 .
215
I am in function 2 .
216
I am in function 1 .
217
I am in function 2 .
218
I am in function 1 .
219
I am in function 2 .
220
I am in function 1 .
221
I am in function 2 .
222
I am in function 1 .
223
I am in function 2 .
224
I am in function 1 .
225
I am in function 2 .
226
I am in function 1 .
227
I am in function 2 .
228
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 162/338
13/11/2016 python Basic and Intermediate Level Modules
I am in function 1 .
229
I am in function 2 .
230
I am in function 1 .
231
I am in function 2 .
232
I am in function 1 .
233
I am in function 2 .
234
I am in function 1 .
235
I am in function 2 .
236
I am in function 1 .
237
I am in function 2 .
238
I am in function 1 .
239
I am in function 2 .
240
I am in function 1 .
241
I am in function 2 .
242
I am in function 1 .
243
I am in function 2 .
244
I am in function 1 .
245
I am in function 2 .
246
I am in function 1 .
247
I am in function 2 .
248
I am in function 1 .
249
I am in function 2 .
250
I am in function 1 .
251
I am in function 2 .
252
I am in function 1 .
253
I am in function 2 .
254
I am in function 1 .
255
I am in function 2 .
256
I am in function 1 .
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 163/338
13/11/2016 python Basic and Intermediate Level Modules
257
I am in function 2 .
258
I am in function 1 .
259
I am in function 2 .
260
I am in function 1 .
261
I am in function 2 .
262
I am in function 1 .
263
I am in function 2 .
264
I am in function 1 .
265
I am in function 2 .
266
I am in function 1 .
267
I am in function 2 .
268
I am in function 1 .
269
I am in function 2 .
270
I am in function 1 .
271
I am in function 2 .
272
I am in function 1 .
273
I am in function 2 .
274
I am in function 1 .
275
I am in function 2 .
276
I am in function 1 .
277
I am in function 2 .
278
I am in function 1 .
279
I am in function 2 .
280
I am in function 1 .
281
I am in function 2 .
282
I am in function 1 .
283
I am in function 2 .
284
I am in function 1 .
285
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 164/338
13/11/2016 python Basic and Intermediate Level Modules
I am in function 2 .
286
I am in function 1 .
287
I am in function 2 .
288
I am in function 1 .
289
I am in function 2 .
290
I am in function 1 .
291
I am in function 2 .
292
I am in function 1 .
293
I am in function 2 .
294
I am in function 1 .
295
I am in function 2 .
296
I am in function 1 .
297
I am in function 2 .
298
I am in function 1 .
299
I am in function 2 .
300
I am in function 1 .
301
I am in function 2 .
302
I am in function 1 .
303
I am in function 2 .
304
I am in function 1 .
305
I am in function 2 .
306
I am in function 1 .
307
I am in function 2 .
308
I am in function 1 .
309
I am in function 2 .
310
I am in function 1 .
311
I am in function 2 .
312
I am in function 1 .
313
I am in function 2 .
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 165/338
13/11/2016 python Basic and Intermediate Level Modules
314
I am in function 1 .
315
I am in function 2 .
316
I am in function 1 .
317
I am in function 2 .
318
I am in function 1 .
319
I am in function 2 .
320
I am in function 1 .
321
I am in function 2 .
322
I am in function 1 .
323
I am in function 2 .
324
I am in function 1 .
325
I am in function 2 .
326
I am in function 1 .
327
I am in function 2 .
328
I am in function 1 .
329
I am in function 2 .
330
I am in function 1 .
331
I am in function 2 .
332
I am in function 1 .
333
I am in function 2 .
334
I am in function 1 .
335
I am in function 2 .
336
I am in function 1 .
337
I am in function 2 .
338
I am in function 1 .
339
I am in function 2 .
340
I am in function 1 .
341
I am in function 2 .
342
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 166/338
13/11/2016 python Basic and Intermediate Level Modules
I am in function 1 .
343
I am in function 2 .
344
I am in function 1 .
345
I am in function 2 .
346
I am in function 1 .
347
I am in function 2 .
348
I am in function 1 .
349
I am in function 2 .
350
I am in function 1 .
351
I am in function 2 .
352
I am in function 1 .
353
I am in function 2 .
354
I am in function 1 .
355
I am in function 2 .
356
I am in function 1 .
357
I am in function 2 .
358
I am in function 1 .
359
I am in function 2 .
360
I am in function 1 .
361
I am in function 2 .
362
I am in function 1 .
363
I am in function 2 .
364
I am in function 1 .
365
I am in function 2 .
366
I am in function 1 .
367
I am in function 2 .
368
I am in function 1 .
369
I am in function 2 .
370
I am in function 1 .
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 167/338
13/11/2016 python Basic and Intermediate Level Modules
371
I am in function 2 .
372
I am in function 1 .
373
I am in function 2 .
374
I am in function 1 .
375
I am in function 2 .
376
I am in function 1 .
377
I am in function 2 .
378
I am in function 1 .
379
I am in function 2 .
380
I am in function 1 .
381
I am in function 2 .
382
I am in function 1 .
383
I am in function 2 .
384
I am in function 1 .
385
I am in function 2 .
386
I am in function 1 .
387
I am in function 2 .
388
I am in function 1 .
389
I am in function 2 .
390
I am in function 1 .
391
I am in function 2 .
392
I am in function 1 .
393
I am in function 2 .
394
I am in function 1 .
395
I am in function 2 .
396
I am in function 1 .
397
I am in function 2 .
398
I am in function 1 .
399
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 168/338
13/11/2016 python Basic and Intermediate Level Modules
I am in function 2 .
400
I am in function 1 .
401
I am in function 2 .
402
I am in function 1 .
403
I am in function 2 .
404
I am in function 1 .
405
I am in function 2 .
406
I am in function 1 .
407
I am in function 2 .
408
I am in function 1 .
409
I am in function 2 .
410
I am in function 1 .
411
I am in function 2 .
412
I am in function 1 .
413
I am in function 2 .
414
I am in function 1 .
415
I am in function 2 .
416
I am in function 1 .
417
I am in function 2 .
418
I am in function 1 .
419
I am in function 2 .
420
I am in function 1 .
421
I am in function 2 .
422
I am in function 1 .
423
I am in function 2 .
424
I am in function 1 .
425
I am in function 2 .
426
I am in function 1 .
427
I am in function 2 .
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 169/338
13/11/2016 python Basic and Intermediate Level Modules
428
I am in function 1 .
429
I am in function 2 .
430
I am in function 1 .
431
I am in function 2 .
432
I am in function 1 .
433
I am in function 2 .
434
I am in function 1 .
435
I am in function 2 .
436
I am in function 1 .
437
I am in function 2 .
438
I am in function 1 .
439
I am in function 2 .
440
I am in function 1 .
441
I am in function 2 .
442
I am in function 1 .
443
I am in function 2 .
444
I am in function 1 .
445
I am in function 2 .
446
I am in function 1 .
447
I am in function 2 .
448
I am in function 1 .
449
I am in function 2 .
450
I am in function 1 .
451
I am in function 2 .
452
I am in function 1 .
453
I am in function 2 .
454
I am in function 1 .
455
I am in function 2 .
456
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 170/338
13/11/2016 python Basic and Intermediate Level Modules
I am in function 1 .
457
I am in function 2 .
458
I am in function 1 .
459
I am in function 2 .
460
I am in function 1 .
461
I am in function 2 .
462
I am in function 1 .
463
I am in function 2 .
464
I am in function 1 .
465
I am in function 2 .
466
I am in function 1 .
467
I am in function 2 .
468
I am in function 1 .
469
I am in function 2 .
470
I am in function 1 .
471
I am in function 2 .
472
I am in function 1 .
473
I am in function 2 .
474
I am in function 1 .
475
I am in function 2 .
476
I am in function 1 .
477
I am in function 2 .
478
I am in function 1 .
479
I am in function 2 .
480
I am in function 1 .
481
I am in function 2 .
482
I am in function 1 .
483
I am in function 2 .
484
I am in function 1 .
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 171/338
13/11/2016 python Basic and Intermediate Level Modules
485
I am in function 2 .
486
I am in function 1 .
487
I am in function 2 .
488
I am in function 1 .
489
I am in function 2 .
490
I am in function 1 .
491
I am in function 2 .
492
I am in function 1 .
493
I am in function 2 .
494
I am in function 1 .
495
I am in function 2 .
496
I am in function 1 .
497
I am in function 2 .
498
I am in function 1 .
499
I am in function 2 .
500
I am in function 1 .
501
I am in function 2 .
502
I am in function 1 .
503
I am in function 2 .
504
I am in function 1 .
505
I am in function 2 .
506
I am in function 1 .
507
I am in function 2 .
508
I am in function 1 .
509
I am in function 2 .
510
I am in function 1 .
511
I am in function 2 .
512
I am in function 1 .
513
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 172/338
13/11/2016 python Basic and Intermediate Level Modules
I am in function 2 .
514
I am in function 1 .
515
I am in function 2 .
516
I am in function 1 .
517
I am in function 2 .
518
I am in function 1 .
519
I am in function 2 .
520
I am in function 1 .
521
I am in function 2 .
522
I am in function 1 .
523
I am in function 2 .
524
I am in function 1 .
525
I am in function 2 .
526
I am in function 1 .
527
I am in function 2 .
528
I am in function 1 .
529
I am in function 2 .
530
I am in function 1 .
531
I am in function 2 .
532
I am in function 1 .
533
I am in function 2 .
534
I am in function 1 .
535
I am in function 2 .
536
I am in function 1 .
537
I am in function 2 .
538
I am in function 1 .
539
I am in function 2 .
540
I am in function 1 .
541
I am in function 2 .
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 173/338
13/11/2016 python Basic and Intermediate Level Modules
542
I am in function 1 .
543
I am in function 2 .
544
I am in function 1 .
545
I am in function 2 .
546
I am in function 1 .
547
I am in function 2 .
548
I am in function 1 .
549
I am in function 2 .
550
I am in function 1 .
551
I am in function 2 .
552
I am in function 1 .
553
I am in function 2 .
554
I am in function 1 .
555
I am in function 2 .
556
I am in function 1 .
557
I am in function 2 .
558
I am in function 1 .
559
I am in function 2 .
560
I am in function 1 .
561
I am in function 2 .
562
I am in function 1 .
563
I am in function 2 .
564
I am in function 1 .
565
I am in function 2 .
566
I am in function 1 .
567
I am in function 2 .
568
I am in function 1 .
569
I am in function 2 .
570
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 174/338
13/11/2016 python Basic and Intermediate Level Modules
I am in function 1 .
571
I am in function 2 .
572
I am in function 1 .
573
I am in function 2 .
574
I am in function 1 .
575
I am in function 2 .
576
I am in function 1 .
577
I am in function 2 .
578
I am in function 1 .
579
I am in function 2 .
580
I am in function 1 .
581
I am in function 2 .
582
I am in function 1 .
583
I am in function 2 .
584
I am in function 1 .
585
I am in function 2 .
586
I am in function 1 .
587
I am in function 2 .
588
I am in function 1 .
589
I am in function 2 .
590
I am in function 1 .
591
I am in function 2 .
592
I am in function 1 .
593
I am in function 2 .
594
I am in function 1 .
595
I am in function 2 .
596
I am in function 1 .
597
I am in function 2 .
598
I am in function 1 .
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 175/338
13/11/2016 python Basic and Intermediate Level Modules
599
I am in function 2 .
600
I am in function 1 .
601
I am in function 2 .
602
I am in function 1 .
603
I am in function 2 .
604
I am in function 1 .
605
I am in function 2 .
606
I am in function 1 .
607
I am in function 2 .
608
I am in function 1 .
609
I am in function 2 .
610
I am in function 1 .
611
I am in function 2 .
612
I am in function 1 .
613
I am in function 2 .
614
I am in function 1 .
615
I am in function 2 .
616
I am in function 1 .
617
I am in function 2 .
618
I am in function 1 .
619
I am in function 2 .
620
I am in function 1 .
621
I am in function 2 .
622
I am in function 1 .
623
I am in function 2 .
624
I am in function 1 .
625
I am in function 2 .
626
I am in function 1 .
627
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 176/338
13/11/2016 python Basic and Intermediate Level Modules
I am in function 2 .
628
I am in function 1 .
629
I am in function 2 .
630
I am in function 1 .
631
I am in function 2 .
632
I am in function 1 .
633
I am in function 2 .
634
I am in function 1 .
635
I am in function 2 .
636
I am in function 1 .
637
I am in function 2 .
638
I am in function 1 .
639
I am in function 2 .
640
I am in function 1 .
641
I am in function 2 .
642
I am in function 1 .
643
I am in function 2 .
644
I am in function 1 .
645
I am in function 2 .
646
I am in function 1 .
647
I am in function 2 .
648
I am in function 1 .
649
I am in function 2 .
650
I am in function 1 .
651
I am in function 2 .
652
I am in function 1 .
653
I am in function 2 .
654
I am in function 1 .
655
I am in function 2 .
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 177/338
13/11/2016 python Basic and Intermediate Level Modules
656
I am in function 1 .
657
I am in function 2 .
658
I am in function 1 .
659
I am in function 2 .
660
I am in function 1 .
661
I am in function 2 .
662
I am in function 1 .
663
I am in function 2 .
664
I am in function 1 .
665
I am in function 2 .
666
I am in function 1 .
667
I am in function 2 .
668
I am in function 1 .
669
I am in function 2 .
670
I am in function 1 .
671
I am in function 2 .
672
I am in function 1 .
673
I am in function 2 .
674
I am in function 1 .
675
I am in function 2 .
676
I am in function 1 .
677
I am in function 2 .
678
I am in function 1 .
679
I am in function 2 .
680
I am in function 1 .
681
I am in function 2 .
682
I am in function 1 .
683
I am in function 2 .
684
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 178/338
13/11/2016 python Basic and Intermediate Level Modules
I am in function 1 .
685
I am in function 2 .
686
I am in function 1 .
687
I am in function 2 .
688
I am in function 1 .
689
I am in function 2 .
690
I am in function 1 .
691
I am in function 2 .
692
I am in function 1 .
693
I am in function 2 .
694
I am in function 1 .
695
I am in function 2 .
696
I am in function 1 .
697
I am in function 2 .
698
I am in function 1 .
699
I am in function 2 .
700
I am in function 1 .
701
I am in function 2 .
702
I am in function 1 .
703
I am in function 2 .
704
I am in function 1 .
705
I am in function 2 .
706
I am in function 1 .
707
I am in function 2 .
708
I am in function 1 .
709
I am in function 2 .
710
I am in function 1 .
711
I am in function 2 .
712
I am in function 1 .
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 179/338
13/11/2016 python Basic and Intermediate Level Modules
713
I am in function 2 .
714
I am in function 1 .
715
I am in function 2 .
716
I am in function 1 .
717
I am in function 2 .
718
I am in function 1 .
719
I am in function 2 .
720
I am in function 1 .
721
I am in function 2 .
722
I am in function 1 .
723
I am in function 2 .
724
I am in function 1 .
725
I am in function 2 .
726
I am in function 1 .
727
I am in function 2 .
728
I am in function 1 .
729
I am in function 2 .
730
I am in function 1 .
731
I am in function 2 .
732
I am in function 1 .
733
I am in function 2 .
734
I am in function 1 .
735
I am in function 2 .
736
I am in function 1 .
737
I am in function 2 .
738
I am in function 1 .
739
I am in function 2 .
740
I am in function 1 .
741
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 180/338
13/11/2016 python Basic and Intermediate Level Modules
I am in function 2 .
742
I am in function 1 .
743
I am in function 2 .
744
I am in function 1 .
745
I am in function 2 .
746
I am in function 1 .
747
I am in function 2 .
748
I am in function 1 .
749
I am in function 2 .
750
I am in function 1 .
751
I am in function 2 .
752
I am in function 1 .
753
I am in function 2 .
754
I am in function 1 .
755
I am in function 2 .
756
I am in function 1 .
757
I am in function 2 .
758
I am in function 1 .
759
I am in function 2 .
760
I am in function 1 .
761
I am in function 2 .
762
I am in function 1 .
763
I am in function 2 .
764
I am in function 1 .
765
I am in function 2 .
766
I am in function 1 .
767
I am in function 2 .
768
I am in function 1 .
769
I am in function 2 .
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 181/338
13/11/2016 python Basic and Intermediate Level Modules
770
I am in function 1 .
771
I am in function 2 .
772
I am in function 1 .
773
I am in function 2 .
774
I am in function 1 .
775
I am in function 2 .
776
I am in function 1 .
777
I am in function 2 .
778
I am in function 1 .
779
I am in function 2 .
780
I am in function 1 .
781
I am in function 2 .
782
I am in function 1 .
783
I am in function 2 .
784
I am in function 1 .
785
I am in function 2 .
786
I am in function 1 .
787
I am in function 2 .
788
I am in function 1 .
789
I am in function 2 .
790
I am in function 1 .
791
I am in function 2 .
792
I am in function 1 .
793
I am in function 2 .
794
I am in function 1 .
795
I am in function 2 .
796
I am in function 1 .
797
I am in function 2 .
798
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 182/338
13/11/2016 python Basic and Intermediate Level Modules
I am in function 1 .
799
I am in function 2 .
800
I am in function 1 .
801
I am in function 2 .
802
I am in function 1 .
803
I am in function 2 .
804
I am in function 1 .
805
I am in function 2 .
806
I am in function 1 .
807
I am in function 2 .
808
I am in function 1 .
809
I am in function 2 .
810
I am in function 1 .
811
I am in function 2 .
812
I am in function 1 .
813
I am in function 2 .
814
I am in function 1 .
815
I am in function 2 .
816
I am in function 1 .
817
I am in function 2 .
818
I am in function 1 .
819
I am in function 2 .
820
I am in function 1 .
821
I am in function 2 .
822
I am in function 1 .
823
I am in function 2 .
824
I am in function 1 .
825
I am in function 2 .
826
I am in function 1 .
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 183/338
13/11/2016 python Basic and Intermediate Level Modules
827
I am in function 2 .
828
I am in function 1 .
829
I am in function 2 .
830
I am in function 1 .
831
I am in function 2 .
832
I am in function 1 .
833
I am in function 2 .
834
I am in function 1 .
835
I am in function 2 .
836
I am in function 1 .
837
I am in function 2 .
838
I am in function 1 .
839
I am in function 2 .
840
I am in function 1 .
841
I am in function 2 .
842
I am in function 1 .
843
I am in function 2 .
844
I am in function 1 .
845
I am in function 2 .
846
I am in function 1 .
847
I am in function 2 .
848
I am in function 1 .
849
I am in function 2 .
850
I am in function 1 .
851
I am in function 2 .
852
I am in function 1 .
853
I am in function 2 .
854
I am in function 1 .
855
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 184/338
13/11/2016 python Basic and Intermediate Level Modules
I am in function 2 .
856
I am in function 1 .
857
I am in function 2 .
858
I am in function 1 .
859
I am in function 2 .
860
I am in function 1 .
861
I am in function 2 .
862
I am in function 1 .
863
I am in function 2 .
864
I am in function 1 .
865
I am in function 2 .
866
I am in function 1 .
867
I am in function 2 .
868
I am in function 1 .
869
I am in function 2 .
870
I am in function 1 .
871
I am in function 2 .
872
I am in function 1 .
873
I am in function 2 .
874
I am in function 1 .
875
I am in function 2 .
876
I am in function 1 .
877
I am in function 2 .
878
I am in function 1 .
879
I am in function 2 .
880
I am in function 1 .
881
I am in function 2 .
882
I am in function 1 .
883
I am in function 2 .
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 185/338
13/11/2016 python Basic and Intermediate Level Modules
884
I am in function 1 .
885
I am in function 2 .
886
I am in function 1 .
887
I am in function 2 .
888
I am in function 1 .
889
I am in function 2 .
890
I am in function 1 .
891
I am in function 2 .
892
I am in function 1 .
893
I am in function 2 .
894
I am in function 1 .
895
I am in function 2 .
896
I am in function 1 .
897
I am in function 2 .
898
I am in function 1 .
899
I am in function 2 .
900
I am in function 1 .
901
I am in function 2 .
902
I am in function 1 .
903
I am in function 2 .
904
I am in function 1 .
905
I am in function 2 .
906
I am in function 1 .
907
I am in function 2 .
908
I am in function 1 .
909
I am in function 2 .
910
I am in function 1 .
911
I am in function 2 .
912
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 186/338
13/11/2016 python Basic and Intermediate Level Modules
I am in function 1 .
913
I am in function 2 .
914
I am in function 1 .
915
I am in function 2 .
916
I am in function 1 .
917
I am in function 2 .
918
I am in function 1 .
919
I am in function 2 .
920
I am in function 1 .
921
I am in function 2 .
922
I am in function 1 .
923
I am in function 2 .
924
I am in function 1 .
925
I am in function 2 .
926
I am in function 1 .
927
I am in function 2 .
928
I am in function 1 .
929
I am in function 2 .
930
I am in function 1 .
931
I am in function 2 .
932
I am in function 1 .
933
I am in function 2 .
934
I am in function 1 .
935
I am in function 2 .
936
I am in function 1 .
937
I am in function 2 .
938
I am in function 1 .
939
I am in function 2 .
940
I am in function 1 .
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 187/338
13/11/2016 python Basic and Intermediate Level Modules
941
I am in function 2 .
942
I am in function 1 .
943
I am in function 2 .
944
I am in function 1 .
945
I am in function 2 .
946
I am in function 1 .
947
I am in function 2 .
948
I am in function 1 .
949
I am in function 2 .
950
I am in function 1 .
951
I am in function 2 .
952
I am in function 1 .
953
I am in function 2 .
954
I am in function 1 .
955
I am in function 2 .
956
I am in function 1 .
957
I am in function 2 .
958
I am in function 1 .
959
I am in function 2 .
960
I am in function 1 .
961
I am in function 2 .
962
I am in function 1 .
963
I am in function 2 .
964
I am in function 1 .
965
I am in function 2 .
966
I am in function 1 .
967
I am in function 2 .
968
I am in function 1 .
969
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 188/338
13/11/2016 python Basic and Intermediate Level Modules
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
RuntimeError Traceback (most recent call last)
<ipython‐input‐47‐043607b7b3c9> in <module>()
‐‐‐‐> 1 func1()
<ipython‐input‐46‐fec7b5a3b174> in func1()
7 noOfloops+=1
8 print noOfloops
‐‐‐‐> 9 return func2()
10
11 def func2():
<ipython‐input‐46‐fec7b5a3b174> in func2()
14 noOfloops+=1
15 print noOfloops
‐‐‐> 16 return func1()
... last 2 frames repeated, from the frame below ...
<ipython‐input‐46‐fec7b5a3b174> in func1()
7 noOfloops+=1
8 print noOfloops
‐‐‐‐> 9 return func2()
10
11 def func2():
RuntimeError: maximum recursion depth exceeded while calling a Python object
NOTE :
Python doesnot have Tail Call optimization(TCO), to handle the recursive functions.
It is very difficult to add TCO to python, as it is a dynamic language.
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 189/338
13/11/2016 python Basic and Intermediate Level Modules
Assignment : Execute the below Script in a new .py file, and observe the result
#!/usr/bin/python
# listDirsNfilesUsingRecursions.py
# Purpose: To list the directories and files, in the given location
import os
def get_dirlist(path):
"""
Return a sorted list of all entries in path.
This returns just the names, not the full path to the names.
"""
dirlist = os.listdir(path)
dirlist.sort()
return dirlist
def print_files(path, prefix = ""):
""" Print recursive listing of contents of path """
if prefix == "": # Detect outermost call, print a heading
print("Folder listing for", path)
prefix = "| "
dirlist = get_dirlist(path)
for f in dirlist:
print(prefix+f) # Print the line
fullname = os.path.join(path, f) # Turn name into full pathname
if os.path.isdir(fullname): # If a directory, recurse.
print_files(fullname, prefix + "| ")
import sys
if sys.platform == 'win32':
d = raw_input('Enter a dircetory path: ')
print_files(repr(d)) # r'C:\Python27\Tools'
else:
d = raw_input('Enter a dircetory path: ')
print_files(repr(d))
In conclusion, note that recursive calls are expensive (inefficient) as they take up a lot of memory and time.
Recursive functions are hard to debug.
Recommended References:
1. Animated explanation of recursions (http://www.composingprograms.com/pages/17recursive
functions.html)
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 190/338
13/11/2016 python Basic and Intermediate Level Modules
In [65]: #!/usr/bin/python
# Switch case equivalent implementation in python
# switchCaseEquivalent.py
case = {'a':'apple', 'b': 'banana', 'c': 'cat'}
caseChoice = raw_input('Enter the case choice(a, b or c only):')
if caseChoice in case:
if caseChoice == 'a':
print case.get('a', None)
elif caseChoice == 'b':
print case.get('b', None)
else:
print case.get('c', None)
else:
print "Please enter a valid case choice: a, b or c"
Enter the case choice(a, b or c only):a
apple
Assignment : In switchCaseEquivalent.py, try to add a choice for reattempt, to the user.
6.0 Modules
Both buitin (ex: os), installed (ex: django) or userdefined
It is a collection of functions, to serve a particular purpose
imported in the functions, using 'import'
Not all modules will be part of basic distribution
To install a new module, pip install moduleName
To search a module, pip search moduleName
In [66]: import sys
In [67]: print dir(sys)
['__displayhook__', '__doc__', '__excepthook__', '__name__', '__package__',
'__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_fram
es', '_getframe', '_mercurial', 'api_version', 'argv', 'builtin_module_name
s', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dl
lhandle', 'dont_write_bytecode', 'exc_clear', 'exc_info', 'exc_type', 'except
hook', 'exec_prefix', 'executable', 'exit', 'exitfunc', 'flags', 'float_inf
o', 'float_repr_style', 'getcheckinterval', 'getdefaultencoding', 'getfilesys
temencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof',
'gettrace', 'getwindowsversion', 'hexversion', 'last_traceback', 'last_typ
e', 'last_value', 'long_info', 'maxint', 'maxsize', 'maxunicode', 'meta_pat
h', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'pref
ix', 'ps1', 'ps2', 'ps3', 'py3kwarning', 'setcheckinterval', 'setprofile', 's
etrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 've
rsion', 'version_info', 'warnoptions', 'winver']
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 191/338
13/11/2016 python Basic and Intermediate Level Modules
In [68]: sys.version
Out[68]: '2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:19:22) [MSC v.1500 32 bit (Int
el)]'
In [69]: sys.version_info
Out[69]: sys.version_info(major=2, minor=7, micro=12, releaselevel='final', serial=0)
In [70]: sys.winver
Out[70]: '2.7'
In [71]: sys.path
Out[71]: ['',
'C:\\Windows\\system32\\python27.zip',
'c:\\python27\\DLLs',
'c:\\python27\\lib',
'c:\\python27\\lib\\plat‐win',
'c:\\python27\\lib\\lib‐tk',
'c:\\python27',
'c:\\python27\\lib\\site‐packages',
'c:\\python27\\lib\\site‐packages\\IPython\\extensions',
'C:\\Users\\HOME\\.ipython']
Assignment : Display the sys.path from interpreter and a script file separately and notice the difference in the
outputs
In [72]: sys.platform
Out[72]: 'win32'
In [73]: sys.getwindowsversion
Out[73]: <function sys.getwindowsversion>
In [74]: callable(sys.getwindowsversion) # callable() builtin function to get whether
a particular object is callable or not
Out[74]: True
In [75]: sys.getwindowsversion()
Out[75]: sys.getwindowsversion(major=6, minor=1, build=7600, platform=2, service_pack
='')
In [76]: callable(sys.maxint)
Out[76]: False
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 192/338
13/11/2016 python Basic and Intermediate Level Modules
In [77]: sys.maxint
Out[77]: 2147483647
In [78]: sys.maxsize
Out[78]: 2147483647
NOTE: Userdefined modules are prioritized to builtin(or installed) modules
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 193/338
13/11/2016 python Basic and Intermediate Level Modules
In [79]: help(sys) # help(sys.winver)
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 194/338
13/11/2016 python Basic and Intermediate Level Modules
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 195/338
13/11/2016 python Basic and Intermediate Level Modules
Help on built‐in module sys:
NAME
sys
FILE
(built‐in)
MODULE DOCS
http://docs.python.org/library/sys
DESCRIPTION
This module provides access to some objects used or maintained by the
interpreter and to functions that interact strongly with the interpreter.
Dynamic objects:
argv ‐‐ command line arguments; argv[0] is the script pathname if known
path ‐‐ module search path; path[0] is the script directory, else ''
modules ‐‐ dictionary of loaded modules
displayhook ‐‐ called to show results in an interactive session
excepthook ‐‐ called to handle any uncaught exception other than SystemEx
it
To customize printing in an interactive session or to install a custom
top‐level exception handler, assign other functions to replace these.
exitfunc ‐‐ if sys.exitfunc exists, this routine is called when Python ex
its
Assigning to sys.exitfunc is deprecated; use the atexit module instead.
stdin ‐‐ standard input file object; used by raw_input() and input()
stdout ‐‐ standard output file object; used by the print statement
stderr ‐‐ standard error object; used for error messages
By assigning other file objects (or objects that behave like files)
to these, it is possible to redirect all of the interpreter's I/O.
last_type ‐‐ type of last uncaught exception
last_value ‐‐ value of last uncaught exception
last_traceback ‐‐ traceback of last uncaught exception
These three are only available in an interactive session after a
traceback has been printed.
exc_type ‐‐ type of exception currently being handled
exc_value ‐‐ value of exception currently being handled
exc_traceback ‐‐ traceback of exception currently being handled
The function exc_info() should be used instead of these three,
because it is thread‐safe.
Static objects:
float_info ‐‐ a dict with information about the float inplementation.
long_info ‐‐ a struct sequence with information about the long implementa
tion.
maxint ‐‐ the largest supported integer (the smallest is ‐maxint‐1)
maxsize ‐‐ the largest supported length of containers.
maxunicode ‐‐ the largest supported character
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 196/338
13/11/2016 python Basic and Intermediate Level Modules
builtin_module_names ‐‐ tuple of module names built into this interpreter
version ‐‐ the version of this interpreter as a string
version_info ‐‐ version information as a named tuple
hexversion ‐‐ version information encoded as a single integer
copyright ‐‐ copyright notice pertaining to this interpreter
platform ‐‐ platform identifier
executable ‐‐ absolute path of the executable binary of the Python interp
reter
prefix ‐‐ prefix used to find the Python library
exec_prefix ‐‐ prefix used to find the machine‐specific Python library
float_repr_style ‐‐ string indicating the style of repr() output for floa
ts
dllhandle ‐‐ [Windows only] integer handle of the Python DLL
winver ‐‐ [Windows only] version number of the Python DLL
__stdin__ ‐‐ the original stdin; don't touch!
__stdout__ ‐‐ the original stdout; don't touch!
__stderr__ ‐‐ the original stderr; don't touch!
__displayhook__ ‐‐ the original displayhook; don't touch!
__excepthook__ ‐‐ the original excepthook; don't touch!
Functions:
displayhook() ‐‐ print an object to the screen, and save it in __builtin_
_._
excepthook() ‐‐ print an exception and its traceback to sys.stderr
exc_info() ‐‐ return thread‐safe information about the current exception
exc_clear() ‐‐ clear the exception state for the current thread
exit() ‐‐ exit the interpreter by raising SystemExit
getdlopenflags() ‐‐ returns flags to be used for dlopen() calls
getprofile() ‐‐ get the global profiling function
getrefcount() ‐‐ return the reference count for an object (plus one :‐)
getrecursionlimit() ‐‐ return the max recursion depth for the interpreter
getsizeof() ‐‐ return the size of an object in bytes
gettrace() ‐‐ get the global debug tracing function
setcheckinterval() ‐‐ control how often the interpreter checks for events
setdlopenflags() ‐‐ set the flags to be used for dlopen() calls
setprofile() ‐‐ set the global profiling function
setrecursionlimit() ‐‐ set the max recursion depth for the interpreter
settrace() ‐‐ set the global debug tracing function
FUNCTIONS
__displayhook__ = displayhook(...)
displayhook(object) ‐> None
Print an object to sys.stdout and also save it in __builtin__._
__excepthook__ = excepthook(...)
excepthook(exctype, value, traceback) ‐> None
Handle an exception by displaying it with a traceback on sys.stderr.
call_tracing(...)
call_tracing(func, args) ‐> object
Call func(*args), while tracing is enabled. The tracing state is
saved, and restored afterwards. This is intended to be called from
a debugger from a checkpoint, to recursively debug some other code.
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 197/338
13/11/2016 python Basic and Intermediate Level Modules
callstats(...)
callstats() ‐> tuple of integers
Return a tuple of function call statistics, if CALL_PROFILE was defin
ed
when Python was built. Otherwise, return None.
When enabled, this function returns detailed, implementation‐specific
details about the number of function calls executed. The return value
is
a 11‐tuple where the entries in the tuple are counts of:
0. all function calls
1. calls to PyFunction_Type objects
2. PyFunction calls that do not create an argument tuple
3. PyFunction calls that do not create an argument tuple
and bypass PyEval_EvalCodeEx()
4. PyMethod calls
5. PyMethod calls on bound methods
6. PyType calls
7. PyCFunction calls
8. generator calls
9. All other calls
10. Number of stack pops performed by call_function()
exc_clear(...)
exc_clear() ‐> None
Clear global information on the current exception. Subsequent calls
to
exc_info() will return (None,None,None) until another exception is ra
ised
in the current thread or the execution stack returns to a frame where
another exception is being handled.
exc_info(...)
exc_info() ‐> (type, value, traceback)
Return information about the most recent exception caught by an excep
t
clause in the current stack frame or in an older stack frame.
exit(...)
exit([status])
Exit the interpreter by raising SystemExit(status).
If the status is omitted or None, it defaults to zero (i.e., succes
s).
If the status is an integer, it will be used as the system exit statu
s.
If it is another kind of object, it will be printed and the system
exit status will be one (i.e., failure).
getcheckinterval(...)
getcheckinterval() ‐> current check interval; see setcheckinterval().
getdefaultencoding(...)
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 198/338
13/11/2016 python Basic and Intermediate Level Modules
getdefaultencoding() ‐> string
Return the current default string encoding used by the Unicode
implementation.
getfilesystemencoding(...)
getfilesystemencoding() ‐> string
Return the encoding used to convert Unicode filenames in
operating system filenames.
getprofile(...)
getprofile()
Return the profiling function set with sys.setprofile.
See the profiler chapter in the library manual.
getrecursionlimit(...)
getrecursionlimit()
Return the current value of the recursion limit, the maximum depth
of the Python interpreter stack. This limit prevents infinite
recursion from causing an overflow of the C stack and crashing Pytho
n.
getrefcount(...)
getrefcount(object) ‐> integer
Return the reference count of object. The count returned is generall
y
one higher than you might expect, because it includes the (temporary)
reference as an argument to getrefcount().
getsizeof(...)
getsizeof(object, default) ‐> int
Return the size of object in bytes.
gettrace(...)
gettrace()
Return the global debug tracing function set with sys.settrace.
See the debugger chapter in the library manual.
getwindowsversion(...)
getwindowsversion()
Return information about the running version of Windows as a named tu
ple.
The members are named: major, minor, build, platform, service_pack,
service_pack_major, service_pack_minor, suite_mask, and product_type.
For
backward compatibility, only the first 5 items are available by index
ing.
All elements are numbers, except service_pack which is a string. Plat
form
may be 0 for win32s, 1 for Windows 9x/ME, 2 for Windows NT/2000/XP/Vi
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 199/338
13/11/2016 python Basic and Intermediate Level Modules
sta/7,
3 for Windows CE. Product_type may be 1 for a workstation, 2 for a do
main
controller, 3 for a server.
setcheckinterval(...)
setcheckinterval(n)
Tell the Python interpreter to check for asynchronous events every
n instructions. This also affects how often thread switches occur.
setprofile(...)
setprofile(function)
Set the profiling function. It will be called on each function call
and return. See the profiler chapter in the library manual.
setrecursionlimit(...)
setrecursionlimit(n)
Set the maximum depth of the Python interpreter stack to n. This
limit prevents infinite recursion from causing an overflow of the C
stack and crashing Python. The highest possible limit is platform‐
dependent.
settrace(...)
settrace(function)
Set the global debug tracing function. It will be called on each
function call. See the debugger chapter in the library manual.
DATA
__stderr__ = <open file '<stderr>', mode 'w'>
__stdin__ = <open file '<stdin>', mode 'r'>
__stdout__ = <open file '<stdout>', mode 'w'>
api_version = 1013
argv = [r'c:\python27\lib\site‐packages\ipykernel\__main__.py', '‐f', ...
builtin_module_names = ('__builtin__', '__main__', '_ast', '_bisect', ...
byteorder = 'little'
copyright = 'Copyright (c) 2001‐2016 Python Software Foundati...ematis...
displayhook = <ipykernel.displayhook.ZMQShellDisplayHook object>
dllhandle = 1608122368
dont_write_bytecode = False
exc_value = TypeError("<module 'sys' (built‐in)> is a built‐in module"...
exec_prefix = r'c:\python27'
executable = r'c:\python27\python.exe'
flags = sys.flags(debug=0, py3k_warning=0, division_warn...unicode=0, ...
float_info = sys.float_info(max=1.7976931348623157e+308, max_...epsilo...
float_repr_style = 'short'
hexversion = 34016496
last_value = KeyError('popitem(): dictionary is empty',)
long_info = sys.long_info(bits_per_digit=15, sizeof_digit=2)
maxint = 2147483647
maxsize = 2147483647
maxunicode = 65535
meta_path = [<six._SixMetaPathImporter object>, <pkg_resources.extern....
modules = {'IPython': <module 'IPython' from 'c:\python27\lib\site‐pac...
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 200/338
13/11/2016 python Basic and Intermediate Level Modules
path = ['', r'C:\Windows\system32\python27.zip', r'c:\python27\DLLs', ...
path_hooks = [<type 'zipimport.zipimporter'>]
path_importer_cache = {'': None, r'C:\Users\HOME\.ipython': None, r'C:...
platform = 'win32'
prefix = r'c:\python27'
ps1 = 'In : '
ps2 = '...: '
ps3 = 'Out: '
py3kwarning = False
stderr = <ipykernel.iostream.OutStream object>
stdin = <open file '<stdin>', mode 'r'>
stdout = <ipykernel.iostream.OutStream object>
subversion = ('CPython', '', '')
version = '2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:19:22) [MSC v...
version_info = sys.version_info(major=2, minor=7, micro=12, releaselev...
warnoptions = []
winver = '2.7'
Methods of importing
import sys
from sys import * # Not recommended by PEP 8
from sys import version
from sys import version as vr # alias importing
In [80]: import sys
sys.version
Out[80]: '2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:19:22) [MSC v.1500 32 bit (Int
el)]'
In [81]: del sys # 'sys' object will be removed from the heap memory
In [82]: sys
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
NameError Traceback (most recent call last)
<ipython‐input‐82‐d7099a5e9c44> in <module>()
‐‐‐‐> 1 sys
NameError: name 'sys' is not defined
In [83]: from sys import version
print "version = ", version
version = 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:19:22) [MSC v.1500 3
2 bit (Intel)]
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 201/338
13/11/2016 python Basic and Intermediate Level Modules
In [84]: from sys import version as vr
print "The Version is ", vr
The Version is 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:19:22) [MSC v.1
500 32 bit (Intel)]
In [85]: del vr # removes 'vr' object from the heap memory
In [86]: vr
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
NameError Traceback (most recent call last)
<ipython‐input‐86‐8264846d88d6> in <module>()
‐‐‐‐> 1 vr
NameError: name 'vr' is not defined
Note: Selective imports optimizes the memory usage; but care should be taken when userdefined identifiers
in the script/project have the same names as these functions of modules
In [87]: import os
In [88]: os.system("echo 'Hello World!'") # 0 means the statement executed properly.
Output will be displayed in console; not here
Out[88]: 0
In [89]: combinedDir = os.path.join('first', 'second', 'third', 'fourth')
print 'combinedDir is ', combinedDir
combinedDir is first\second\third\fourth
In [90]: print os.path.exists(combinedDir)
False
In [91]: os.getcwd()
Out[91]: 'C:\\Users\\HOME\\Google Drive\\python\\tut\\complete Material'
In [92]: os.mkdir('newFolder')
In [93]: os.listdir(os.getcwd())
Out[93]: ['.ipynb_checkpoints',
'desktop.ini',
'newFolder',
'python ‐ Basic Level Module.ipynb',
'Untitled.ipynb']
In [94]: os.makedirs(combinedDir) # Common gotcha: It is 'makedirs' and not 'mkdirs'
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 202/338
13/11/2016 python Basic and Intermediate Level Modules
In [95]: os.listdir(os.getcwd())
Out[95]: ['.ipynb_checkpoints',
'desktop.ini',
'first',
'newFolder',
'python ‐ Basic Level Module.ipynb',
'Untitled.ipynb']
In [96]: with open('myTest.txt', 'ab+') as myTst:
myTst.write("Will power can do a lot of things!")
myTst.close()
# working with files will be done in next chapter.
In [97]: os.listdir(os.getcwd())
Out[97]: ['.ipynb_checkpoints',
'desktop.ini',
'first',
'myTest.txt',
'newFolder',
'python ‐ Basic Level Module.ipynb',
'Untitled.ipynb']
In [98]: os.rename('myTest.txt', 'myNewFile.tsf') # renaming files
In [99]: os.listdir(os.getcwd())
Out[99]: ['.ipynb_checkpoints',
'desktop.ini',
'first',
'myNewFile.tsf',
'newFolder',
'python ‐ Basic Level Module.ipynb',
'Untitled.ipynb']
In [100]: os.rename('newFolder', 'myNewFolder') # renaming directories
In [101]: os.listdir(os.getcwd())
Out[101]: ['.ipynb_checkpoints',
'desktop.ini',
'first',
'myNewFile.tsf',
'myNewFolder',
'python ‐ Basic Level Module.ipynb',
'Untitled.ipynb']
In [102]: os.chdir('first/')
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 203/338
13/11/2016 python Basic and Intermediate Level Modules
In [103]: os.listdir(os.getcwd())
Out[103]: ['desktop.ini', 'second']
In [104]: os.chdir('..') # changing to previous directories
In [105]: os.getcwd()
Out[105]: 'C:\\Users\\HOME\\Google Drive\\python\\tut\\complete Material'
In [106]: os.listdir(os.getcwd())
Out[106]: ['.ipynb_checkpoints',
'desktop.ini',
'first',
'myNewFile.tsf',
'myNewFolder',
'python ‐ Basic Level Module.ipynb',
'Untitled.ipynb']
In [107]: os.stat('myNewFile.tsf') # for more details, goto help(os.stat('myNewFile.ts
f'))
Out[107]: nt.stat_result(st_mode=33206, st_ino=0L, st_dev=0L, st_nlink=0, st_uid=0, st_
gid=0, st_size=34L, st_atime=1478694576L, st_mtime=1478694576L, st_ctime=1478
694576L)
In [108]: modifiedTime = os.stat('myNewFile.tsf').st_mtime
print "myNewFile.tsf was last modified on ", modifiedTime # epoch time
myNewFile.tsf was last modified on 1478694576.73
In [109]: from datetime import datetime
print datetime.fromtimestamp(modifiedTime)
2016‐11‐09 17:59:36.726220
In [110]: print "myNewFile.tsf was last modified on ", datetime.fromtimestamp(modifiedTi
me)
myNewFile.tsf was last modified on 2016‐11‐09 17:59:36.726220
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 204/338
13/11/2016 python Basic and Intermediate Level Modules
In [112]: #!/usr/bin/python
import sys
import os
if sys.platform == 'win32':
dirToCheck = raw_input("Enter a directory path to check ") #'C:\Python27\T
ools'
else:
dirToCheck = raw_input("Enter a directory path to check ")
for dirpath, dirnames, filenames in os.walk(dirToCheck):
print 'Current Path:', dirpath
print 'Directories:', dirnames
print 'Files:', filenames
print '‐'*50
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 205/338
13/11/2016 python Basic and Intermediate Level Modules
Enter a directory path to check C:\Python27\Tools
Current Path: C:\Python27\Tools
Directories: ['i18n', 'pynche', 'Scripts', 'versioncheck', 'webchecker']
Files: []
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
Current Path: C:\Python27\Tools\i18n
Directories: []
Files: ['makelocalealias.py', 'msgfmt.py', 'pygettext.py']
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
Current Path: C:\Python27\Tools\pynche
Directories: ['X']
Files: ['ChipViewer.py', 'ColorDB.py', 'DetailsViewer.py', 'html40colors.tx
t', 'ListViewer.py', 'Main.py', 'namedcolors.txt', 'pyColorChooser.py', 'pync
he.pyw', 'PyncheWidget.py', 'README.txt', 'StripViewer.py', 'Switchboard.py',
'TextViewer.py', 'TypeinViewer.py', 'webcolors.txt', 'websafe.txt', '__init_
_.py']
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
Current Path: C:\Python27\Tools\pynche\X
Directories: []
Files: ['rgb.txt', 'xlicense.txt']
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
Current Path: C:\Python27\Tools\Scripts
Directories: []
Files: ['2to3.py', 'analyze_dxp.py', 'byext.py', 'byteyears.py', 'checkappen
d.py', 'checkpip.py', 'checkpyc.py', 'classfix.py', 'cleanfuture.py', 'combin
erefs.py', 'copytime.py', 'crlf.py', 'cvsfiles.py', 'db2pickle.py', 'diff.p
y', 'dutree.py', 'eptags.py', 'finddiv.py', 'findlinksto.py', 'findnocoding.p
y', 'find_recursionlimit.py', 'fixcid.py', 'fixdiv.py', 'fixheader.py', 'fixn
otice.py', 'fixps.py', 'google.py', 'gprof2html.py', 'h2py.py', 'hotshotmain.
py', 'ifdef.py', 'lfcr.py', 'linktree.py', 'lll.py', 'logmerge.py', 'mailerda
emon.py', 'md5sum.py', 'methfix.py', 'mkreal.py', 'ndiff.py', 'nm2def.py', 'o
bjgraph.py', 'parseentities.py', 'patchcheck.py', 'pathfix.py', 'pdeps.py',
'pickle2db.py', 'pindent.py', 'ptags.py', 'pydocgui.pyw', 'pysource.py', 'RE
ADME.txt', 'redemo.py', 'reindent‐rst.py', 'reindent.py', 'rgrep.py', 'serve.
py', 'setup.py', 'suff.py', 'svneol.py', 'texcheck.py', 'texi2html.py', 'tree
sync.py', 'untabify.py', 'which.py', 'win_add2path.py', 'xxci.py']
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
Current Path: C:\Python27\Tools\versioncheck
Directories: []
Files: ['checkversions.py', 'pyversioncheck.py', 'README.txt', '_checkversio
n.py']
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
Current Path: C:\Python27\Tools\webchecker
Directories: []
Files: ['README.txt', 'tktools.py', 'wcgui.py', 'wcmac.py', 'webchecker.py',
'websucker.py', 'wsgui.py']
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
6.0 Modules
In [113]: import os
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 206/338
13/11/2016 python Basic and Intermediate Level Modules
In [114]: os.getcwd()
Out[114]: 'C:\\Users\\HOME\\Google Drive\\python\\tut\\complete Material'
In [115]: for dirpath, dirnames, filenames in os.walk('C:\Python27\Tools'):
print 'Current Path:', dirpath
print 'Directories:', dirnames
print 'Files:', filenames
print '‐'*50
Current Path: C:\Python27\Tools
Directories: ['i18n', 'pynche', 'Scripts', 'versioncheck', 'webchecker']
Files: []
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
Current Path: C:\Python27\Tools\i18n
Directories: []
Files: ['makelocalealias.py', 'msgfmt.py', 'pygettext.py']
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
Current Path: C:\Python27\Tools\pynche
Directories: ['X']
Files: ['ChipViewer.py', 'ColorDB.py', 'DetailsViewer.py', 'html40colors.tx
t', 'ListViewer.py', 'Main.py', 'namedcolors.txt', 'pyColorChooser.py', 'pync
he.pyw', 'PyncheWidget.py', 'README.txt', 'StripViewer.py', 'Switchboard.py',
'TextViewer.py', 'TypeinViewer.py', 'webcolors.txt', 'websafe.txt', '__init_
_.py']
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
Current Path: C:\Python27\Tools\pynche\X
Directories: []
Files: ['rgb.txt', 'xlicense.txt']
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
Current Path: C:\Python27\Tools\Scripts
Directories: []
Files: ['2to3.py', 'analyze_dxp.py', 'byext.py', 'byteyears.py', 'checkappen
d.py', 'checkpip.py', 'checkpyc.py', 'classfix.py', 'cleanfuture.py', 'combin
erefs.py', 'copytime.py', 'crlf.py', 'cvsfiles.py', 'db2pickle.py', 'diff.p
y', 'dutree.py', 'eptags.py', 'finddiv.py', 'findlinksto.py', 'findnocoding.p
y', 'find_recursionlimit.py', 'fixcid.py', 'fixdiv.py', 'fixheader.py', 'fixn
otice.py', 'fixps.py', 'google.py', 'gprof2html.py', 'h2py.py', 'hotshotmain.
py', 'ifdef.py', 'lfcr.py', 'linktree.py', 'lll.py', 'logmerge.py', 'mailerda
emon.py', 'md5sum.py', 'methfix.py', 'mkreal.py', 'ndiff.py', 'nm2def.py', 'o
bjgraph.py', 'parseentities.py', 'patchcheck.py', 'pathfix.py', 'pdeps.py',
'pickle2db.py', 'pindent.py', 'ptags.py', 'pydocgui.pyw', 'pysource.py', 'RE
ADME.txt', 'redemo.py', 'reindent‐rst.py', 'reindent.py', 'rgrep.py', 'serve.
py', 'setup.py', 'suff.py', 'svneol.py', 'texcheck.py', 'texi2html.py', 'tree
sync.py', 'untabify.py', 'which.py', 'win_add2path.py', 'xxci.py']
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
Current Path: C:\Python27\Tools\versioncheck
Directories: []
Files: ['checkversions.py', 'pyversioncheck.py', 'README.txt', '_checkversio
n.py']
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
Current Path: C:\Python27\Tools\webchecker
Directories: []
Files: ['README.txt', 'tktools.py', 'wcgui.py', 'wcmac.py', 'webchecker.py',
'websucker.py', 'wsgui.py']
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 207/338
13/11/2016 python Basic and Intermediate Level Modules
Assignment : exceute this, and observe the output
`
for i in os.environ: # To get the environmental variables
print i
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 208/338
13/11/2016 python Basic and Intermediate Level Modules
In [116]: [en for en in os.environ]
Out[116]: ['TMP',
'CM2013DIR',
'USERDOMAIN',
'COMPUTERNAME',
'PSMODULEPATH',
'COMMONPROGRAMFILES',
'PROCESSOR_IDENTIFIER',
'PROGRAMFILES',
'PROCESSOR_REVISION',
'SYSTEMROOT',
'PATH',
'UGII_BASE_DIR',
'PROGRAMFILES(X86)',
'TERM',
'TEMP',
'COMMONPROGRAMFILES(X86)',
'PROCESSOR_ARCHITECTURE',
'ALLUSERSPROFILE',
'LOCALAPPDATA',
'HOMEPATH',
'JPY_INTERRUPT_EVENT',
'PROGRAMW6432',
'USERNAME',
'UGII_ROOT_DIR',
'LOGONSERVER',
'PROMPT',
'COMSPEC',
'JPY_PARENT_PID',
'PROGRAMDATA',
'UGS_LICENSE_SERVER',
'MPLBACKEND',
'GIT_PAGER',
'SESSIONNAME',
'PATHEXT',
'FP_NO_HOST_CHECK',
'WINDIR',
'MOZ_PLUGIN_PATH',
'HOMEDRIVE',
'PAGER',
'SYSTEMDRIVE',
'CLICOLOR',
'NUMBER_OF_PROCESSORS',
'UGII_LANG',
'APPDATA',
'PROCESSOR_LEVEL',
'PROCESSOR_ARCHITEW6432',
'ILBDIR',
'COMMONPROGRAMW6432',
'OS',
'PUBLIC',
'IPY_INTERRUPT_EVENT',
'USERPROFILE']
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 209/338
13/11/2016 python Basic and Intermediate Level Modules
In [118]: print "os.environ.get('TMP') is ", os.environ.get('TMP')
os.environ.get('TMP') is C:\Users\HOME\AppData\Local\Temp
In [119]: print "os.environ.get('TMP') is ", os.environ.get('USERPROFILE')
os.environ.get('TMP') is C:\Users\HOME
In [120]: print "os.environ.get('TMP') is ", os.environ.get('USERNAME')
os.environ.get('TMP') is HOME
In [121]: print "os.environ.get('TEMP') is ", os.environ.get('TEMP')
os.environ.get('TEMP') is C:\Users\HOME\AppData\Local\Temp
In [122]: enVar = os.environ
print type(enVar)
<type 'instance'>
In [123]: filePath = os.path.join(os.environ.get('TMP'), 'test.txt')
print filePath
C:\Users\HOME\AppData\Local\Temp\test.txt
In [124]: print os.path.exists(filePath)
False
In [125]: with open(filePath, 'ab+') as f:
f.write("This is the right time to invest my energies, to get success")
f.close()
In [126]: print os.path.exists(filePath)
True
In [127]: os.path.basename(filePath)
Out[127]: 'test.txt'
In [128]: os.path.dirname(filePath)
Out[128]: 'C:\\Users\\HOME\\AppData\\Local\\Temp'
In [129]: os.path.dirname(filePath) + os.path.basename(filePath)
Out[129]: 'C:\\Users\\HOME\\AppData\\Local\\Temptest.txt'
In [130]: filePath
Out[130]: 'C:\\Users\\HOME\\AppData\\Local\\Temp\\test.txt'
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 210/338
13/11/2016 python Basic and Intermediate Level Modules
In [131]: os.path.splitext(filePath)
Out[131]: ('C:\\Users\\HOME\\AppData\\Local\\Temp\\test', '.txt')
In [132]: os.path.splitext('someRandomfile.pdf')
Out[132]: ('someRandomfile', '.pdf')
In [133]: os.listdir(os.getcwd())
Out[133]: ['.ipynb_checkpoints',
'desktop.ini',
'first',
'myNewFile.tsf',
'myNewFolder',
'python ‐ Basic Level Module.ipynb',
'Untitled.ipynb']
In [134]: os.listdir('.')
Out[134]: ['.ipynb_checkpoints',
'desktop.ini',
'first',
'myNewFile.tsf',
'myNewFolder',
'python ‐ Basic Level Module.ipynb',
'Untitled.ipynb']
In [135]: os.mkdir('newFolder')
In [136]: os.listdir('.')
Out[136]: ['.ipynb_checkpoints',
'desktop.ini',
'first',
'myNewFile.tsf',
'myNewFolder',
'newFolder',
'python ‐ Basic Level Module.ipynb',
'Untitled.ipynb']
In [137]: os.chdir('newFolder/')
os.listdir('..')
Out[137]: ['.ipynb_checkpoints',
'desktop.ini',
'first',
'myNewFile.tsf',
'myNewFolder',
'newFolder',
'python ‐ Basic Level Module.ipynb',
'Untitled.ipynb']
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 211/338
13/11/2016 python Basic and Intermediate Level Modules
In [138]: os.getcwd()
Out[138]: 'C:\\Users\\HOME\\Google Drive\\python\\tut\\complete Material\\newFolder'
time related modules time, datetime, pytz, ...
In [140]: import time
In [141]: print dir(time)
['__doc__', '__name__', '__package__', 'accept2dyear', 'altzone', 'asctime',
'clock', 'ctime', 'daylight', 'gmtime', 'localtime', 'mktime', 'sleep', 'str
ftime', 'strptime', 'struct_time', 'time', 'timezone', 'tzname']
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 212/338
13/11/2016 python Basic and Intermediate Level Modules
In [142]: print time.__doc__
This module provides various functions to manipulate time values.
There are two standard representations of time. One is the number
of seconds since the Epoch, in UTC (a.k.a. GMT). It may be an integer
or a floating point number (to represent fractions of seconds).
The Epoch is system‐defined; on Unix, it is generally January 1st, 1970.
The actual value can be retrieved by calling gmtime(0).
The other representation is a tuple of 9 integers giving local time.
The tuple items are:
year (four digits, e.g. 1998)
month (1‐12)
day (1‐31)
hours (0‐23)
minutes (0‐59)
seconds (0‐59)
weekday (0‐6, Monday is 0)
Julian day (day in the year, 1‐366)
DST (Daylight Savings Time) flag (‐1, 0 or 1)
If the DST flag is 0, the time is given in the regular time zone;
if it is 1, the time is given in the DST time zone;
if it is ‐1, mktime() should guess based on the date and time.
Variables:
timezone ‐‐ difference in seconds between UTC and local standard time
altzone ‐‐ difference in seconds between UTC and local DST time
daylight ‐‐ whether local time should reflect DST
tzname ‐‐ tuple of (standard time zone name, DST time zone name)
Functions:
time() ‐‐ return current time in seconds since the Epoch as a float
clock() ‐‐ return CPU time since process start as a float
sleep() ‐‐ delay for a number of seconds given as a float
gmtime() ‐‐ convert seconds since Epoch to UTC tuple
localtime() ‐‐ convert seconds since Epoch to local time tuple
asctime() ‐‐ convert time tuple to string
ctime() ‐‐ convert time in seconds to string
mktime() ‐‐ convert local time tuple to seconds since Epoch
strftime() ‐‐ convert time tuple to string according to format specification
strptime() ‐‐ parse string to time tuple according to format specification
tzset() ‐‐ change the local timezone
In [143]: time.tzname
Out[143]: ('India Standard Time', 'India Standard Time')
In [144]: time.tzname[0]
Out[144]: 'India Standard Time'
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 213/338
13/11/2016 python Basic and Intermediate Level Modules
In [145]: time.daylight # Results in boolean result of existence or absence of DST, in t
hat time zone
Out[145]: 0
In [146]: time.timezone
Out[146]: ‐19800
In [147]: time.time() #seconds past from epoch time, till now
Out[147]: 1478695362.258
In [148]: time.ctime()
Out[148]: 'Wed Nov 09 18:12:55 2016'
In [149]: time.asctime()
Out[149]: 'Wed Nov 09 18:13:02 2016'
In [150]: type(time.asctime())
Out[150]: str
In [151]: time.gmtime()
Out[151]: time.struct_time(tm_year=2016, tm_mon=11, tm_mday=9, tm_hour=12, tm_min=43, t
m_sec=12, tm_wday=2, tm_yday=314, tm_isdst=0)
In [152]: type(time.gmtime())
Out[152]: time.struct_time
In [153]: time.localtime()
Out[153]: time.struct_time(tm_year=2016, tm_mon=11, tm_mday=9, tm_hour=18, tm_min=13, t
m_sec=24, tm_wday=2, tm_yday=314, tm_isdst=0)
In [154]: t = time.localtime()
print type(t)
<type 'time.struct_time'>
In [155]: time.clock()
Out[155]: 1.5395415860973236e‐06
Assignment : what is the difference between time.time() and time.clock()
In [156]: time.sleep(6) # To let the interpreter to sleep for 6 seconds
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 214/338
13/11/2016 python Basic and Intermediate Level Modules
In [157]: time.strptime('Fri Aug 19 07:33:01 2016') # String to time tuple conversion
Out[157]: time.struct_time(tm_year=2016, tm_mon=8, tm_mday=19, tm_hour=7, tm_min=33, tm
_sec=1, tm_wday=4, tm_yday=232, tm_isdst=‐1)
In [158]: time.strptime(time.asctime())
Out[158]: time.struct_time(tm_year=2016, tm_mon=11, tm_mday=9, tm_hour=18, tm_min=14, t
m_sec=27, tm_wday=2, tm_yday=314, tm_isdst=‐1)
In [159]: time.strptime(time.ctime())
Out[159]: time.struct_time(tm_year=2016, tm_mon=11, tm_mday=9, tm_hour=18, tm_min=14, t
m_sec=34, tm_wday=2, tm_yday=314, tm_isdst=‐1)
Assignment : what is the difference between time.asctime() and time.ctime()?
In [160]: time.strptime("8/4/1988", "%d/%m/%Y")
Out[160]: time.struct_time(tm_year=1988, tm_mon=4, tm_mday=8, tm_hour=0, tm_min=0, tm_s
ec=0, tm_wday=4, tm_yday=99, tm_isdst=‐1)
In [161]: time.strptime("08 Apr 1988", "%d %b %Y")
Out[161]: time.struct_time(tm_year=1988, tm_mon=4, tm_mday=8, tm_hour=0, tm_min=0, tm_s
ec=0, tm_wday=4, tm_yday=99, tm_isdst=‐1)
In [162]: time.strptime("15‐Aug‐1947", "%d‐%b‐%Y")
Out[162]: time.struct_time(tm_year=1947, tm_mon=8, tm_mday=15, tm_hour=0, tm_min=0, tm_
sec=0, tm_wday=4, tm_yday=227, tm_isdst=‐1)
In [163]: myTime = time.ctime()
print myTime
newCreatedTime = time.mktime(time.strptime(myTime))
print newCreatedTime
Wed Nov 09 18:15:20 2016
1478695520.0
Interesting Article: https://wiki.python.org/moin/WorkingWithTime
(https://wiki.python.org/moin/WorkingWithTime)
In [164]: import datetime
In [165]: print datetime.__doc__
Fast implementation of the datetime type.
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 215/338
13/11/2016 python Basic and Intermediate Level Modules
In [166]: print dir(datetime)
['MAXYEAR', 'MINYEAR', '__doc__', '__name__', '__package__', 'date', 'datetim
e', 'datetime_CAPI', 'time', 'timedelta', 'tzinfo']
In [167]: print datetime.datetime.__doc__
datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinf
o]]]]])
The year, month and day arguments are required. tzinfo may be None, or an
instance of a tzinfo subclass. The remaining arguments may be ints or longs.
In [168]: print dir(datetime.datetime)
['__add__', '__class__', '__delattr__', '__doc__', '__eq__', '__format__', '_
_ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt
__', '__ne__', '__new__', '__radd__', '__reduce__', '__reduce_ex__', '__repr_
_', '__rsub__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclas
shook__', 'astimezone', 'combine', 'ctime', 'date', 'day', 'dst', 'fromordina
l', 'fromtimestamp', 'hour', 'isocalendar', 'isoformat', 'isoweekday', 'max',
'microsecond', 'min', 'minute', 'month', 'now', 'replace', 'resolution', 'se
cond', 'strftime', 'strptime', 'time', 'timetuple', 'timetz', 'today', 'toord
inal', 'tzinfo', 'tzname', 'utcfromtimestamp', 'utcnow', 'utcoffset', 'utctim
etuple', 'weekday', 'year']
In [169]: datetime.datetime.now() # local time
Out[169]: datetime.datetime(2016, 11, 9, 18, 16, 18, 343000)
In [170]: type(datetime.datetime.now())
Out[170]: datetime.datetime
In [171]: datetime.datetime.utcnow()
Out[171]: datetime.datetime(2016, 11, 9, 12, 46, 30, 850000)
In [172]: datetime.date.today()
Out[172]: datetime.date(2016, 11, 9)
In [173]: tdy = datetime.date.today()
print tdy
2016‐11‐09
In [174]: print tdy.strftime("four‐digit year: %Y, two‐digit year: %y, month: %m, day: %
d, seconds: %S")
four‐digit year: 2016, two‐digit year: 16, month: 11, day: 09, seconds: 00
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 216/338
13/11/2016 python Basic and Intermediate Level Modules
In [175]: print tdy.strftime("four‐digit year: %Y, two‐digit year: %y, month: %m, monthI
nWords: %b, day: %d")
four‐digit year: 2016, two‐digit year: 16, month: 11, monthInWords: Nov, day:
09
NOTE: Both time and datetime modules can be used together
In [176]: t = datetime.datetime.now() # For the local timezone
print t
print t.timetuple()
print "Epoch Seconds:", time.mktime(t.timetuple())
2016‐11‐09 18:17:39.509000
time.struct_time(tm_year=2016, tm_mon=11, tm_mday=9, tm_hour=18, tm_min=17, t
m_sec=39, tm_wday=2, tm_yday=314, tm_isdst=‐1)
Epoch Seconds: 1478695659.0
In [177]: t = datetime.datetime.utcnow() # For UTC
print t
print "Epoch Seconds:", time.mktime(t.timetuple())
2016‐11‐09 12:47:54.812000
Epoch Seconds: 1478675874.0
timeit module
In [178]: import timeit
In [179]: logic = '[x for x in xrange(10) if x%2 != 0]'
eval(logic) # eval() ‐ builtin function to execute a statement
Out[179]: [1, 3, 5, 7, 9]
In [180]: t = timeit.Timer(logic)
print t
print "1000 repeats of this logic takes :", t.timeit(1000), " seconds"
<timeit.Timer instance at 0x0363D058>
1000 repeats of this logic takes : 0.00273679175956 seconds
In [181]: print "10,00,000 repeats of this logic takes :", t.timeit(1000000), " seconds"
10,00,000 repeats of this logic takes : 2.25790503286 seconds
In [183]: timeit.timeit('range(12)')
Out[183]: 0.6488182478785234
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 217/338
13/11/2016 python Basic and Intermediate Level Modules
In [184]: timeit.timeit('xrange(12)')
Out[184]: 0.26588960871009704
Python file types
.pyw This is windows executable
.pyc compiled python bytecode file, for a particular .py file.
.pyd python dll file
.pyc file is platformindependent, yet interpreter dependent. The interpreter checks for the .py file last modified
time stamp with that of .pyc file. If there is a mismatch, then that .pyc file will be discarded, and a new .pyc file
will be created.
It is created either
1. when a particular _.py_ file is imported in another python script and/or in pyth
on interpreter.
2. Manually _.pyc_ file can be created, when the _.py_ file is compiled using py_co
mpile
python ‐m py_compile fileName.py
In [186]: import os
In [187]: os.listdir('.')
Out[187]: ['.ipynb_checkpoints',
'desktop.ini',
'first',
'myNewFile.tsf',
'myNewFolder',
'newFolder',
'python ‐ Basic Level Module.ipynb',
'Untitled.ipynb']
In [188]: code = "\
with open('myFile.txt', 'ab+') as myf:\
myf.write('This is my final struggle to succes. So, I will give my best')\
myf.close()\
"
with open('myfile.pyw', 'ab+') as f:
f.write(code)
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 218/338
13/11/2016 python Basic and Intermediate Level Modules
In [189]: os.listdir('.')
Out[189]: ['.ipynb_checkpoints',
'desktop.ini',
'first',
'myfile.pyw',
'myNewFile.tsf',
'myNewFolder',
'newFolder',
'python ‐ Basic Level Module.ipynb',
'Untitled.ipynb']
INFERENCE: .pyw is executable in windows, and it can be used when no i/o operations are involved for the
script
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 219/338
13/11/2016 python Basic and Intermediate Level Modules
In [190]: #!/usr/bin/python
'''
Purpose: module importing demonstration
'''
# newScript.py
vowels = 'aeiou'
luckyNumber = 1321
def firstFunction():
'''
This is firstFunction
:return: None
'''
print "This is first function"
def addition(a,b):
'''
performs addition operation
ex: addition(12, 34)
returns: a+b
'''
return a+b
def subtraction(a,b):
'''
performs subtraction operation
'''
return a‐b
def multiplication(a,b):
'''
performs multiplication operation
'''
return a*b
if __name__ == '__main__':
print 'This script is executed directly'
else:
print 'This script is imported from another module'
This script is executed directly
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 220/338
13/11/2016 python Basic and Intermediate Level Modules
In [193]: os.listdir('.')
Out[193]: ['.ipynb_checkpoints',
'desktop.ini',
'first',
'myfile.pyw',
'myNewFile.tsf',
'myNewFolder',
'newFolder',
'newScript.py',
'python ‐ Basic Level Module.ipynb',
'Untitled.ipynb']
In [194]: import newScript #.py extension should not be given
This script is imported from another module
In [195]: os.listdir('.') # observe the .pyc file
Out[195]: ['.ipynb_checkpoints',
'desktop.ini',
'first',
'myfile.pyw',
'myNewFile.tsf',
'myNewFolder',
'newFolder',
'newScript.py',
'newScript.pyc',
'python ‐ Basic Level Module.ipynb',
'Untitled.ipynb']
In [196]: print newScript.__doc__
Purpose: module importing demonstration
In [197]: print dir(newScript)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'additio
n', 'firstFunction', 'luckyNumber', 'multiplication', 'subtraction', 'vowel
s']
In [198]: newScript.firstFunction()
This is first function
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 221/338
13/11/2016 python Basic and Intermediate Level Modules
In [199]: help(newScript.addition)
Help on function addition in module newScript:
addition(a, b)
performs addition operation
ex: addition(12, 34)
returns: a+b
In [200]: newScript.addition(99, 67)
Out[200]: 166
callable() buitlin function; results whether a particular object is callable or not
In [201]: callable(newScript.addition)
Out[201]: True
In [202]: newScript.addition(12.23, 6.07)
Out[202]: 18.3
In [203]: newScript.subtraction(12.23, 6.07)
Out[203]: 6.16
The newScript.py file was modified with better help for functions. Also, two static variables were added.
In [204]: help(newScript.addition)
Help on function addition in module newScript:
addition(a, b)
performs addition operation
ex: addition(12, 34)
returns: a+b
Notice that the changes were not reflected.
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 222/338
13/11/2016 python Basic and Intermediate Level Modules
Modifying the script of load modules needs reloading the module to get the changes to be affected in the
working script, or interpreter.
In python 2.x,
reload(<user‐defined Module name>)
ex: reload(newScript)
In python 3.x,
import imp
imp.reload(<user‐defined Module name>)
imp.reload(newScript)
or
import importlib
importlib.reload(<user‐defined Module name>)
importlib.reload(newScript)
There are various other modules like xreload, reimport with additional functionalities, for reloading the
modules.
In [205]: reload(newScript) # To get the changes
This script is imported from another module
Out[205]: <module 'newScript' from 'newScript.pyc'>
In [206]: help(newScript.addition)
Help on function addition in module newScript:
addition(a, b)
performs addition operation
ex: addition(12, 34)
returns: a+b
In [207]: print dir(newScript)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'additio
n', 'firstFunction', 'luckyNumber', 'multiplication', 'subtraction', 'vowel
s']
In [208]: newScript.luckyNumber
Out[208]: 1321
To ensure that certain part of logic should be executed only when the script is independently called, write that
logic under if __name__ == '__main__' condition
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 223/338
13/11/2016 python Basic and Intermediate Level Modules
In [209]: reload(newScript)
This script is imported from another module
Out[209]: <module 'newScript' from 'newScript.pyc'>
At times, if the imported module has any dependencies on other imported modules, those functionality will not
get refreshed.
In that case, it would be better to delete that imported module object.
#del <importedModuleName>
del newScript
or
# using sys module
import sys
#del sys.modules[<importedModuleName>]
del sys.modules[newScript]
In [210]: del newScript # deletes the imported object from the interpreter cache
In [211]: newScript # results in error, as that object is no more present in inter
preter cache
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
NameError Traceback (most recent call last)
<ipython‐input‐211‐9b0d1d72cb8a> in <module>()
‐‐‐‐> 1 newScript # results in error, as that object is no more present
in interpreter cache
NameError: name 'newScript' is not defined
In [212]: import newScript
print dir(newScript)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'additio
n', 'firstFunction', 'luckyNumber', 'multiplication', 'subtraction', 'vowel
s']
In [213]: newScript.__file__ # Observe that the compiled bytecode object is called; no
t the .py file
Out[213]: 'newScript.pyc'
In [214]: newScript.__doc__
Out[214]: '\n\tPurpose: module importing demonstration\n\t\n'
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 224/338
13/11/2016 python Basic and Intermediate Level Modules
In [215]: print newScript.__doc__
Purpose: module importing demonstration
In [216]: help(newScript)
Help on module newScript:
NAME
newScript ‐ Purpose: module importing demonstration
FILE
c:\users\home\google drive\python\tut\complete material\newscript.py
FUNCTIONS
addition(a, b)
performs addition operation
ex: addition(12, 34)
returns: a+b
firstFunction()
This is firstFunction
:return: None
multiplication(a, b)
performs multiplication operation
subtraction(a, b)
performs subtraction operation
DATA
luckyNumber = 1321
vowels = 'aeiou'
NOTE: Ensure that the script related docstrings were written, just after the shebang line.
eval,exec, execfile, compile and py_compile
eval(str,globals,locals) This function executes an expression string and returns the result.
In [1]: eval('2+3') # returns the output
Out[1]: 5
In [2]: eval("'Python'*3") # observe both single(') and double(") quotes
Out[2]: 'PythonPythonPython'
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 225/338
13/11/2016 python Basic and Intermediate Level Modules
In [3]: eval("eval('2+3')")
Out[3]: 5
In [4]: eval("print 'Hello World!'")
File "<string>", line 1
print 'Hello World!'
^
SyntaxError: invalid syntax
Inference: statement execution is not possible with eval()
exec(filename,globals,locals) function executes the statements
In [5]: exec("print 'Hello World!'") # exec() executes a string containing arbitrary
python code
Hello World!
In [6]: exec('2+34') # doesn't return output
In [7]: exec("exec('2+34')") # doesn't return output
Interview Question : what is the difference between eval() and exec() ?
In [8]: a=[1,2,3,45]
exec "for i in a: print i"
1
2
3
45
In [9]: exec '\
a=[1,2,3,45];\
exec "for i in a: print i"'
1
2
3
45
In [10]: exec("'Hello World!'")
In [11]: exec("print 'Hello World!'")
Hello World!
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 226/338
13/11/2016 python Basic and Intermediate Level Modules
execfile(filename,globals,locals) function executes the contents of a file
In [12]: #!/usr/bin/python
# fileName.py
print "HelloWorld!"
birds=['parrot','hen','hyna']
for b in birds:
print b
HelloWorld!
parrot
hen
hyna
In [13]: del birds, b
In [14]: import os;
os.listdir(os.getcwd())
Out[14]: ['.ipynb_checkpoints',
'desktop.ini',
'fibGenerator.py',
'fibGenerator.pyc',
'fileName.py',
'first',
'myfile.pyw',
'myNewFile.tsf',
'myNewFolder',
'newFolder',
'newScript.py',
'newScript.pyc',
'python ‐ Basic Level Module.ipynb',
'python+‐+Basic+Level+Module.html']
Observe that 'fileName.py' is placed in the current working directory
In [15]: execfile("fileName.py") # To execute the python script
HelloWorld!
parrot
hen
hyna
In [16]: myGlobals={'x':7,'y':10,'birds':['parrot','pigeon','sparrow']}
myLocals={'x':2,'y':20}
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 227/338
13/11/2016 python Basic and Intermediate Level Modules
In [17]: a=eval("3*x+4*y",myGlobals,myLocals) # locals are preferred ‐ 3*2+ 4*20 =
86
print a
86
In [18]: a=eval("3*x+4*y",myLocals, myGlobals)
# here, also, locals are preferred.
# syntax: eval(string, global_variables, local_variables)
print a
61
In [19]: myLocals ={}
a=eval("3*x+4*y",myLocals, myGlobals) # In the absence of locals, globals ar
e choosen
print a
61
In [20]: myLocals ={'birds':['localBird','myLocal Bird','sparrow']}
In [21]: exec "for b in birds: print b" in myGlobals,myLocals
localBird
myLocal Bird
sparrow
In [22]: exec "for b in birds: print b" in myLocals, myGlobals # preference will be don
e based on position
parrot
pigeon
sparrow
In [23]: execfile("fileName.py",myGlobals,myLocals) # Values present within script are
preferred. there are more local
HelloWorld!
parrot
hen
hyna
Observe that the values for 'birds' is preferred to from 'fileName.py'
In [24]: del birds
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 228/338
13/11/2016 python Basic and Intermediate Level Modules
In [25]: #!/usr/bin/python
# fileName.py
print "HelloWorld!"
for b in birds:
print b
HelloWorld!
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
NameError Traceback (most recent call last)
<ipython‐input‐25‐74f39257017d> in <module>()
4
5
‐‐‐‐> 6 for b in birds:
7 print b
NameError: name 'birds' is not defined
In [26]: execfile("fileName.py",myGlobals,myLocals) # problem with ipython environmen
t, as filename.py is still not updated
HelloWorld!
parrot
hen
hyna
In [30]: del fileName
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
NameError Traceback (most recent call last)
<ipython‐input‐30‐574981b7b5bd> in <module>()
‐‐‐‐> 1 del fileName
NameError: name 'fileName' is not defined
In [31]: execfile("fileName.py",myGlobals,myLocals) # problem with ipython environmen
t, as filename.py is still not updated
HelloWorld!
parrot
hen
hyna
In [32]: execfile("fileName.py",myGlobals,myLocals) # problem with ipython environmen
t, as filename.py is still not updated
HelloWorld!
parrot
hen
hyna
In [33]: myLocals = {'birds':['ostrich','vulchur','Bat']}
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 229/338
13/11/2016 python Basic and Intermediate Level Modules
In [34]: execfile("fileName.py",myGlobals,myLocals)
HelloWorld!
ostrich
vulchur
Bat
In [35]: myLocals
Out[35]: {'b': 'Bat', 'birds': ['ostrich', 'vulchur', 'Bat']}
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 230/338
13/11/2016 python Basic and Intermediate Level Modules
In [36]: myGlobals
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 231/338
13/11/2016 python Basic and Intermediate Level Modules
Out[36]:
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 232/338
13/11/2016 python Basic and Intermediate Level Modules
{'__builtins__': {'ArithmeticError': ArithmeticError,
'AssertionError': AssertionError,
'AttributeError': AttributeError,
'BaseException': BaseException,
'BufferError': BufferError,
'BytesWarning': BytesWarning,
'DeprecationWarning': DeprecationWarning,
'EOFError': EOFError,
'Ellipsis': Ellipsis,
'EnvironmentError': EnvironmentError,
'Exception': Exception,
'False': False,
'FloatingPointError': FloatingPointError,
'FutureWarning': FutureWarning,
'GeneratorExit': GeneratorExit,
'IOError': IOError,
'ImportError': ImportError,
'ImportWarning': ImportWarning,
'IndentationError': IndentationError,
'IndexError': IndexError,
'KeyError': KeyError,
'KeyboardInterrupt': KeyboardInterrupt,
'LookupError': LookupError,
'MemoryError': MemoryError,
'NameError': NameError,
'None': None,
'NotImplemented': NotImplemented,
'NotImplementedError': NotImplementedError,
'OSError': OSError,
'OverflowError': OverflowError,
'PendingDeprecationWarning': PendingDeprecationWarning,
'ReferenceError': ReferenceError,
'RuntimeError': RuntimeError,
'RuntimeWarning': RuntimeWarning,
'StandardError': StandardError,
'StopIteration': StopIteration,
'SyntaxError': SyntaxError,
'SyntaxWarning': SyntaxWarning,
'SystemError': SystemError,
'SystemExit': SystemExit,
'TabError': TabError,
'True': True,
'TypeError': TypeError,
'UnboundLocalError': UnboundLocalError,
'UnicodeDecodeError': UnicodeDecodeError,
'UnicodeEncodeError': UnicodeEncodeError,
'UnicodeError': UnicodeError,
'UnicodeTranslateError': UnicodeTranslateError,
'UnicodeWarning': UnicodeWarning,
'UserWarning': UserWarning,
'ValueError': ValueError,
'Warning': Warning,
'WindowsError': WindowsError,
'ZeroDivisionError': ZeroDivisionError,
'__IPYTHON__': True,
'__debug__': True,
'__doc__': "Built‐in functions, exceptions, and other objects.\n\nNoteworth
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 233/338
13/11/2016 python Basic and Intermediate Level Modules
y: None is the `nil' object; Ellipsis represents `...' in slices.",
'__import__': <function __import__>,
'__name__': '__builtin__',
'__package__': None,
'abs': <function abs>,
'all': <function all>,
'any': <function any>,
'apply': <function apply>,
'basestring': basestring,
'bin': <function bin>,
'bool': bool,
'buffer': buffer,
'bytearray': bytearray,
'bytes': str,
'callable': <function callable>,
'chr': <function chr>,
'classmethod': classmethod,
'cmp': <function cmp>,
'coerce': <function coerce>,
'compile': <function compile>,
'complex': complex,
'copyright': Copyright (c) 2001‐2016 Python Software Foundation.
All Rights Reserved.
Copyright (c) 2000 BeOpen.com.
All Rights Reserved.
Copyright (c) 1995‐2001 Corporation for National Research Initiatives.
All Rights Reserved.
Copyright (c) 1991‐1995 Stichting Mathematisch Centrum, Amsterdam.
All Rights Reserved.,
'credits': Thanks to CWI, CNRI, BeOpen.com, Zope Corporation and a cast
of thousands
for supporting Python development. See www.python.org for more informa
tion.,
'delattr': <function delattr>,
'dict': dict,
'dir': <function dir>,
'divmod': <function divmod>,
'dreload': <function IPython.lib.deepreload._dreload>,
'enumerate': enumerate,
'eval': <function eval>,
'execfile': <function execfile>,
'file': file,
'filter': <function filter>,
'float': float,
'format': <function format>,
'frozenset': frozenset,
'get_ipython': <bound method ZMQInteractiveShell.get_ipython of <ipykernel.
zmqshell.ZMQInteractiveShell object at 0x03479A70>>,
'getattr': <function getattr>,
'globals': <function globals>,
'hasattr': <function hasattr>,
'hash': <function hash>,
'help': Type help() for interactive help, or help(object) for help about ob
ject.,
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 234/338
13/11/2016 python Basic and Intermediate Level Modules
'hex': <function hex>,
'id': <function id>,
'input': <function ipykernel.ipkernel.<lambda>>,
'int': int,
'intern': <function intern>,
'isinstance': <function isinstance>,
'issubclass': <function issubclass>,
'iter': <function iter>,
'len': <function len>,
'license': Type license() to see the full license text,
'list': list,
'locals': <function locals>,
'long': long,
'map': <function map>,
'max': <function max>,
'memoryview': memoryview,
'min': <function min>,
'next': <function next>,
'object': object,
'oct': <function oct>,
'open': <function open>,
'ord': <function ord>,
'pow': <function pow>,
'print': <function print>,
'property': property,
'range': <function range>,
'raw_input': <bound method IPythonKernel.raw_input of <ipykernel.ipkernel.I
PythonKernel object at 0x03479B70>>,
'reduce': <function reduce>,
'reload': <function reload>,
'repr': <function repr>,
'reversed': reversed,
'round': <function round>,
'set': set,
'setattr': <function setattr>,
'slice': slice,
'sorted': <function sorted>,
'staticmethod': staticmethod,
'str': str,
'sum': <function sum>,
'super': super,
'tuple': tuple,
'type': type,
'unichr': <function unichr>,
'unicode': unicode,
'vars': <function vars>,
'xrange': xrange,
'zip': <function zip>},
'b': 'sparrow',
'birds': ['parrot', 'pigeon', 'sparrow'],
'x': 7,
'y': 10}
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 235/338
13/11/2016 python Basic and Intermediate Level Modules
when a string is passed to exec,eval(), or execfile(), parser first compiles to create bytecode.
To remove this redundant process every time, compile will create precompiled bytecode, which can be used
everytime, till the code is not changed
compile (str, filename, kind) function a string compiled into byte code, str is the string to be compiled, the
filename is to define the string variable file, the kind parameter specifies the type of code is compiled
' Single 'refers to a single statement,
' exec 'means more than one statement,
' eval 'means an expression.
compile () function returns a code object, the object, of course, can also be passed to the eval () function and
the exec statement to perform, for example, :
In [37]: str = "for i in range (0,10): print i,"
c = compile (str,'', 'exec') # compiled to byte code object
exec c # execution
0 1 2 3 4 5 6 7 8 9
In [38]: str2 = "for i in range (0,10): print i,"
c2 = compile (str2,'', 'eval') # eval() can't execute statements
eval(c2)
File "<string>", line 1
for i in range (0,10): print i,
^
SyntaxError: invalid syntax
In [57]: str2 = "[0,1,2,3,4,5,6,7,8,9]+ [99,88,77]"
c2 = compile (str2,'', 'eval') # eval() can execute expressions
eval(c2)
Out[57]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 99, 88, 77]
In [58]: print c2, type(c2) # code object
<code object <module> at 0384DCC8, file "", line 1> <type 'code'>
In [59]: print dir(c2)
['__class__', '__cmp__', '__delattr__', '__doc__', '__eq__', '__format__', '_
_ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt
__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setat
tr__', '__sizeof__', '__str__', '__subclasshook__', 'co_argcount', 'co_cellva
rs', 'co_code', 'co_consts', 'co_filename', 'co_firstlineno', 'co_flags', 'co
_freevars', 'co_lnotab', 'co_name', 'co_names', 'co_nlocals', 'co_stacksize',
'co_varnames']
py_compile It is a module to create bytecode file, .pyc
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 236/338
13/11/2016 python Basic and Intermediate Level Modules
In [64]: import py_compile
py_compile.compile('fileName.py')
In [65]: os.listdir('.')
Out[65]: ['.ipynb_checkpoints',
'desktop.ini',
'fibGenerator.py',
'fibGenerator.pyc',
'fileName.py',
'fileName.pyc',
'first',
'myfile.pyw',
'myNewFile.tsf',
'myNewFolder',
'newFolder',
'newScript.py',
'newScript.pyc',
'python ‐ Basic Level Module.ipynb',
'python+‐+Basic+Level+Module.html']
In Python 2.x, input(...) is equivalent to eval(raw_input(...))
In Python 3.x, raw_input() was renamed input()
Iterators
Process to iterate through all the elements of a collection
In [217]: for i in range(7):
print 'Hey ', i
Hey 0
Hey 1
Hey 2
Hey 3
Hey 4
Hey 5
Hey 6
In [218]: for i in [12, 23, 34, 54, 56]:
print i,
12 23 34 54 56
In [219]: print [char for char in 'Python Programming']
['P', 'y', 't', 'h', 'o', 'n', ' ', 'P', 'r', 'o', 'g', 'r', 'a', 'm', 'm',
'i', 'n', 'g']
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 237/338
13/11/2016 python Basic and Intermediate Level Modules
In [220]: for key in {'a': 'Apple', 'b': 'Ball'}:
print key,
a b
NOTE: The default iterator for dictionary is keys()
In [221]: for item in {'a': 'Apple', 'b': 'Ball'}.items():
print item,
('a', 'Apple') ('b', 'Ball')
Also, iterators can be used in other ways
In [222]: '‐'.join(['Date', 'Month', 'Year'])
Out[222]: 'Date‐Month‐Year'
In [223]: '‐'.join({'Date':8, 'Month':4, 'Year': 2016})
Out[223]: 'Date‐Year‐Month'
In [224]: num = {'Date':8, 'Month':4, 'Year': 2016}
print num.values()
'‐'.join(str(num.values()))
[8, 2016, 4]
Out[224]: '[‐8‐,‐ ‐2‐0‐1‐6‐,‐ ‐4‐]'
Assignment : using join method of strings try to display as '842016' if the input dictionary is {'Date':8,
'Month':4, 'Year': 2016}
In [227]: list('Programming')
Out[227]: ['P', 'r', 'o', 'g', 'r', 'a', 'm', 'm', 'i', 'n', 'g']
In [228]: list({'Date':8, 'Month':4, 'Year': 2016})
Out[228]: ['Date', 'Year', 'Month']
Iteration (Iter) protocol
iter() takes an iterable object and retuns an iterator
next() method call to retun elements from the iterator. Results in StopIterator error, if the elements are not
present
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 238/338
13/11/2016 python Basic and Intermediate Level Modules
In [229]: range(9)
Out[229]: [0, 1, 2, 3, 4, 5, 6, 7, 8]
In [230]: xrange(9)
Out[230]: xrange(9)
In [231]: a = xrange(9)
In [232]: print a
xrange(9)
In [233]: for i in xrange(9):
print i,
print "\n"
for i in range(9):
print i,
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
In [234]: li = iter([12,23,34]) # list iterator # iter() builtin function ‐ to
create iterators
print li, type(li)
<listiterator object at 0x0354C930> <type 'listiterator'>
In [235]: l = [12, 23, 45, 56]
print l, type(l)
li = iter(l)
print li, type(li)
[12, 23, 45, 56] <type 'list'>
<listiterator object at 0x0354C990> <type 'listiterator'>
In [236]: print dir(l)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__del
slice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '_
_getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '_
_init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__
new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul_
_', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '_
_subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'rem
ove', 'reverse', 'sort']
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 239/338
13/11/2016 python Basic and Intermediate Level Modules
In [237]: print dir(li)
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__
hash__', '__init__', '__iter__', '__length_hint__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subc
lasshook__', 'next']
In [238]: print li.next()
12
In [239]: print li.next()
23
In [240]: print li.next(), li.next()
45 56
In [241]: print li.next() # As there are no more values in it
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
StopIteration Traceback (most recent call last)
<ipython‐input‐241‐27f9b92ed352> in <module>()
‐‐‐‐> 1 print li.next()
StopIteration:
In [242]: t = (12, 23, 45, 56)
print t, type(t)
ti = iter(t) # tuple iterator
print ti, type(ti)
(12, 23, 45, 56) <type 'tuple'>
<tupleiterator object at 0x0354CF50> <type 'tupleiterator'>
In [243]: print dir(ti)
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__
hash__', '__init__', '__iter__', '__length_hint__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subc
lasshook__', 'next']
In [244]: ti.next()
Out[244]: 12
In [245]: print ti.next(), ti.next(), ti.next()
23 45 56
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 240/338
13/11/2016 python Basic and Intermediate Level Modules
In [246]: print ti.next()
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
StopIteration Traceback (most recent call last)
<ipython‐input‐246‐6ce46c9248fd> in <module>()
‐‐‐‐> 1 print ti.next()
StopIteration:
In [247]: s = {12,23,34}
print s, type(s)
si = iter(s) # set iterator
print si, type(si)
set([34, 12, 23]) <type 'set'>
<setiterator object at 0x035421E8> <type 'setiterator'>
In [248]: print dir(si)
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__
hash__', '__init__', '__iter__', '__length_hint__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subc
lasshook__', 'next']
In [249]: print si.next(), si.next(), si.next(), si.next() # exception is for the 4th
call
34 12 23
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
StopIteration Traceback (most recent call last)
<ipython‐input‐249‐8c532c0610cf> in <module>()
‐‐‐‐> 1 print si.next(), si.next(), si.next(), si.next()
StopIteration:
Assignment : Try the iter() protocol for frozenset
In [250]: d = {'a':12, 'b':23, 'c':34}
print d, type(d)
di = iter(d) # dictionary iterator
print di, type(di)
{'a': 12, 'c': 34, 'b': 23} <type 'dict'>
<dictionary‐keyiterator object at 0x035F57B0> <type 'dictionary‐keyiterator'>
In [251]: print dir(di)
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__
hash__', '__init__', '__iter__', '__length_hint__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subc
lasshook__', 'next']
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 241/338
13/11/2016 python Basic and Intermediate Level Modules
In [252]: print di.next()
a
In [253]: print di.next(), di.next(), di.next()
c b
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
StopIteration Traceback (most recent call last)
<ipython‐input‐253‐35f26283dd3e> in <module>()
‐‐‐‐> 1 print di.next(), di.next(), di.next()
StopIteration:
Assignment : Try to get the dictionary pair in dictionary iterator object
Generators
It simplifies the creation of iterators
It is a function that returns a sequence of results, rather than a single result.
If a function uses the 'yield' keyword, it creates a generator object.
yield is different from return.
Interview Question : what is the difference between iterator and generator?
Interview Question : what is the difference between funnction and generator?
In [254]: def count(n):
print "Stating to count!"
i = 0
while i<n:
yield i
i+=1
print '$', i
#return i # PEP8 strongly discourages usage of yield and retun, in same
function
In [255]: c = count(6)
In [256]: print c
<generator object count at 0x03542698>
In [257]: print c.next() # execution starts when .next() is given # It stores the s
tate, after execution
Stating to count!
0
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 242/338
13/11/2016 python Basic and Intermediate Level Modules
In [258]: c.next()
Out[258]: 1
In [259]: print c.next(), c.next(), c.next()
2 3 4
In [260]: c.next()
Out[260]: 5
In [261]: c.next() # because there are no more values
$ 6
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
StopIteration Traceback (most recent call last)
<ipython‐input‐261‐69882ed18d78> in <module>()
‐‐‐‐> 1 c.next() # because there are no more values
StopIteration:
This function doesn't get executed when the function call is made; but executed when the next() method call is
done.
In [262]: def foo():
print "Start the function!"
for i in range(3):
print "before yield", i
yield i
print "after yield", i
print "end of function "
In [263]: f = foo()
In [264]: type(f)
Out[264]: generator
In [265]: f.next()
Start the function!
before yield 0
Out[265]: 0
In [266]: f.next()
after yield 0
before yield 1
Out[266]: 1
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 243/338
13/11/2016 python Basic and Intermediate Level Modules
In [267]: f.next()
after yield 1
before yield 2
Out[267]: 2
In [268]: f.next()
after yield 2
end of function
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
StopIteration Traceback (most recent call last)
<ipython‐input‐268‐c3e65e5362fb> in <module>()
‐‐‐‐> 1 f.next()
StopIteration:
Interview Question : What is the difference between yield and return?
yield will halt the execution, untill the next next() method is encountered. Where as return will return the result
at only, and won't go back to the function
Generator function terminates by calling either return or by raising StopIteration error.
It is not recommended to place both yield and return for the same function.
In [269]: def yrange(n):
i = 0
while i<n:
yield i
i+=1
In [270]: for i in yrange(3):
print i
0
1
2
In [271]: y = yrange(3)
In [272]: print y, type(y)
<generator object yrange at 0x035FD4B8> <type 'generator'>
In [273]: y.next()
Out[273]: 0
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 244/338
13/11/2016 python Basic and Intermediate Level Modules
In [274]: for i in y:
print i # prints the remaining elements in the generator object
1
2
In [275]: def integers():
"""Infinite sequence of integers."""
i = 1
while True:
yield i
i = i + 1
def squares():
for i in integers():
yield i * i
def take(n, seq):
"""Returns first n values from the given sequence."""
seq = iter(seq)
result = []
try:
for i in range(n):
result.append(seq.next())
except StopIteration:
pass
return result
print take(5, squares()) # prints [1, 4, 9, 16, 25]
[1, 4, 9, 16, 25]
In [276]: #!/usr/bin/python
# Purpose: To make a Fibonacci generator.
# fibGenerator.py
def fibonacci(max):
n, a, b = 0, 0, 1
while n < max:
yield a
a, b = b, a + b
n = n + 1
if __name__ == '__main__': # This condition gets executed, only if the pyt
hon script is directly executed
fib10 = fibonacci(10)
for i in fib10:
print i,
0 1 1 2 3 5 8 13 21 34
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 245/338
13/11/2016 python Basic and Intermediate Level Modules
In [277]: import os; os.listdir(os.getcwd())
Out[277]: ['.ipynb_checkpoints',
'desktop.ini',
'fibGenerator.py',
'first',
'myfile.pyw',
'myNewFile.tsf',
'myNewFolder',
'newFolder',
'newScript.py',
'newScript.pyc',
'python ‐ Basic Level Module.ipynb',
'Untitled.ipynb']
In [278]: from fibGenerator import fibonacci
In [279]: fibonacci
Out[279]: <function fibGenerator.fibonacci>
In [280]: type(fibonacci)
Out[280]: function
In [281]: fib = fibonacci(10)
In [282]: print fib, type(fib)
<generator object fibonacci at 0x0355C3C8> <type 'generator'>
In [283]: fib.next()
Out[283]: 0
In [284]: for i in fib:
print i,
1 1 2 3 5 8 13 21 34
In [285]: reload(fibonacci)
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐285‐e616c20e4b49> in <module>()
‐‐‐‐> 1 reload(fibonacci)
TypeError: reload() argument must be module
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 246/338
13/11/2016 python Basic and Intermediate Level Modules
In [286]: #del fibonacci
import fibGenerator
reload(fibGenerator) # .pyc file will be recreated
Out[286]: <module 'fibGenerator' from 'fibGenerator.pyc'>
In [287]: f = fibGenerator.fibonacci(10)
for i in f:
print i,
0 1 1 2 3 5 8 13 21 34
Generator Expressions
tuple comprehension
It is generator version of list comprehension.
List comprehension creates a sequence that contains the resulting data. Generator expression
creates a generator that knows how to produce data on demand.
Generator Expression (GE) improves performance and memory usage
GE creates objects, which can't be indexed.
syntax:
(expression for item1 in iterable1
for item2 in iterable2
for item3 in iterable3
.
.
.
for itemN in iterableN
if condition)
`
In [288]: b = (10*i for i in [1,2,3,4])
In [289]: print b, type(b)
<generator object <genexpr> at 0x03542878> <type 'generator'>
In [290]: b.next()
Out[290]: 10
In [291]: b.next()
Out[291]: 20
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 247/338
13/11/2016 python Basic and Intermediate Level Modules
In [292]: b.next(), b.next(), b.next()
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
StopIteration Traceback (most recent call last)
<ipython‐input‐292‐10d82aa87e61> in <module>()
‐‐‐‐> 1 b.next(), b.next(), b.next()
StopIteration:
In [293]: c = list(b) # Generator expression to list conversion
print c, type(c)
[] <type 'list'>
In [294]: b = (10*i for i in [1,2,3,4])
c = list(b) # Generator expression to list conversion
print c, type(c)
[10, 20, 30, 40] <type 'list'>
Interview Question : what is the result of this :
sum(i*i for i in range(10))
In [295]: sum(i*i for i in range(10)) # sum() ‐ builtin function to result the summat
ion
Out[295]: 285
In [296]: sum([i*i for i in range(10)])
Out[296]: 285
Assignment : Try to evaluate the decimal and complex numbers in sum() function
Assignment : Try to mimic the sum() function functionality using reduce function
Itertools
chain chains multiple iterators together
izip iterable version of zip
product computes the cartesian product of input iterables
product(A,B) is same as ((x,y) for x in A for y in B)
In [297]: import itertools
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 248/338
13/11/2016 python Basic and Intermediate Level Modules
In [298]: li1 = iter([1,2,3])
li2 = iter([4,5,6])
a = itertools.chain(li1, li2)
print type(a)
print a
<type 'itertools.chain'>
<itertools.chain object at 0x03545530>
In [299]: list(a)
Out[299]: [1, 2, 3, 4, 5, 6]
In [300]: list(itertools.chain([1,2,3], [4,5,6]))
Out[300]: [1, 2, 3, 4, 5, 6]
In [301]: list(itertools.chain([[1,2,3], [4,5,6]]))
Out[301]: [[1, 2, 3], [4, 5, 6]]
In [302]: list(itertools.chain([[1,2,3], [4,5,6]], [99, 79, 69]))
Out[302]: [[1, 2, 3], [4, 5, 6], 99, 79, 69]
In [303]: list(itertools.chain(['ABC', 'DEF']))
Out[303]: ['ABC', 'DEF']
In [304]: list(itertools.chain.from_iterable(['ABC', 'DEF']))
Out[304]: ['A', 'B', 'C', 'D', 'E', 'F']
In [305]: list(itertools.chain.from_iterable([[1,2,3], [4,5,6]], [99, 79, 69]))
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐305‐8061948b2310> in <module>()
‐‐‐‐> 1 list(itertools.chain.from_iterable([[1,2,3], [4,5,6]], [99, 79, 69]))
TypeError: from_iterable() takes exactly one argument (2 given)
Interview Question : How to convert a multidimensional list to a flat list
input: [[1,2,3], [4,5,6], [99, 79, 69]]
output: [1, 2, 3, 4, 5, 6, 99, 79, 69]
In [306]: list(itertools.chain.from_iterable([[1,2,3], [4,5,6], [99, 79, 69]]))
Out[306]: [1, 2, 3, 4, 5, 6, 99, 79, 69]
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 249/338
13/11/2016 python Basic and Intermediate Level Modules
Assignment : Try to do multidimensional list to single dimensional list, or list flattening, using itertools
In [307]: for x, y in itertools.izip(["a", "b", "c"], [1, 2, 3]):
print x,y
a 1
b 2
c 3
In [308]: list(itertools.izip_longest('abcd', 'ABCD', fillvalue='‐'))
Out[308]: [('a', 'A'), ('b', 'B'), ('c', 'C'), ('d', 'D')]
In [309]: list(itertools.izip_longest('abcd', 'AB', fillvalue='‐'))
Out[309]: [('a', 'A'), ('b', 'B'), ('c', '‐'), ('d', '‐')]
In [310]: list(itertools.izip_longest('ab', 'ABCD', fillvalue='‐'))
Out[310]: [('a', 'A'), ('b', 'B'), ('‐', 'C'), ('‐', 'D')]
In [311]: list(itertools.izip_longest('cd', 'ABCD', fillvalue='‐'))
Out[311]: [('c', 'A'), ('d', 'B'), ('‐', 'C'), ('‐', 'D')]
In [312]: print list(itertools.product([1,2,3], repeat = 2))
[(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]
In [313]: print list(itertools.product([1,2,3], repeat = 0))
[()]
In [314]: print list(itertools.product([1,2,3], repeat = 1))
[(1,), (2,), (3,)]
In [315]: print list(itertools.product([1,2,3], repeat = 3))
[(1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 2, 1), (1, 2, 2), (1, 2, 3), (1, 3, 1),
(1, 3, 2), (1, 3, 3), (2, 1, 1), (2, 1, 2), (2, 1, 3), (2, 2, 1), (2, 2, 2),
(2, 2, 3), (2, 3, 1), (2, 3, 2), (2, 3, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3),
(3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 3, 1), (3, 3, 2), (3, 3, 3)]
In [316]: print list(itertools.product([1,2,3],[3,4]))
[(1, 3), (1, 4), (2, 3), (2, 4), (3, 3), (3, 4)]
In [317]: s = [[1,2,3],[3,4,5]]
print list(itertools.product(*s)) # UNPACKING
[(1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5), (3, 3), (3, 4), (3, 5)]
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 250/338
13/11/2016 python Basic and Intermediate Level Modules
In [318]: print list(itertools.product(s))
[([1, 2, 3],), ([3, 4, 5],)]
In [319]: s = [(1,2,3),[3,4,5]] # non‐homegeneous list
print list(itertools.product(*s))
[(1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5), (3, 3), (3, 4), (3, 5)]
In [320]: s = [(1,2,(45,78,9),3),[3,4,[33, (44,)],5]] # multi‐dimensional list
list(itertools.product(*s))
Out[320]: [(1, 3),
(1, 4),
(1, [33, (44,)]),
(1, 5),
(2, 3),
(2, 4),
(2, [33, (44,)]),
(2, 5),
((45, 78, 9), 3),
((45, 78, 9), 4),
((45, 78, 9), [33, (44,)]),
((45, 78, 9), 5),
(3, 3),
(3, 4),
(3, [33, (44,)]),
(3, 5)]
In [321]: t = ((1,2,(45,78,9),3),[3,4,[33, 44],5]) # multi‐dimensional tuple
print list(itertools.product(*t)) # displaying as a list
[(1, 3), (1, 4), (1, [33, 44]), (1, 5), (2, 3), (2, 4), (2, [33, 44]), (2,
5), ((45, 78, 9), 3), ((45, 78, 9), 4), ((45, 78, 9), [33, 44]), ((45, 78,
9), 5), (3, 3), (3, 4), (3, [33, 44]), (3, 5)]
In [322]: print tuple(itertools.product(*t)) # displaying as a tuple
((1, 3), (1, 4), (1, [33, 44]), (1, 5), (2, 3), (2, 4), (2, [33, 44]), (2,
5), ((45, 78, 9), 3), ((45, 78, 9), 4), ((45, 78, 9), [33, 44]), ((45, 78,
9), 5), (3, 3), (3, 4), (3, [33, 44]), (3, 5))
In [323]: list(itertools.permutations('AB',2))
Out[323]: [('A', 'B'), ('B', 'A')]
In [324]: list(itertools.combinations('AB',2))
Out[324]: [('A', 'B')]
In [325]: list(itertools.combinations_with_replacement('AB',2))
Out[325]: [('A', 'A'), ('A', 'B'), ('B', 'B')]
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 251/338
13/11/2016 python Basic and Intermediate Level Modules
In [326]: list(itertools.permutations('ABC',2))
Out[326]: [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]
In [327]: list(itertools.permutations('ABC',3))
Out[327]: [('A', 'B', 'C'),
('A', 'C', 'B'),
('B', 'A', 'C'),
('B', 'C', 'A'),
('C', 'A', 'B'),
('C', 'B', 'A')]
In [328]: list(itertools.combinations('ABC',3))
Out[328]: [('A', 'B', 'C')]
In [329]: list(itertools.combinations_with_replacement('ABC',3))
Out[329]: [('A', 'A', 'A'),
('A', 'A', 'B'),
('A', 'A', 'C'),
('A', 'B', 'B'),
('A', 'B', 'C'),
('A', 'C', 'C'),
('B', 'B', 'B'),
('B', 'B', 'C'),
('B', 'C', 'C'),
('C', 'C', 'C')]
In [330]: list(itertools.compress('ABCDEF', [1,0,1,0,1,1]))
Out[330]: ['A', 'C', 'E', 'F']
In [331]: list(itertools.compress('ABCDEF', [1,0,1,0,1,1,1]))
Out[331]: ['A', 'C', 'E', 'F']
In [332]: list(itertools.compress('ABCDEF', [1,1,1,1,1,1,1]))
Out[332]: ['A', 'B', 'C', 'D', 'E', 'F']
In [333]: list(itertools.compress('ABCDEF', [0,0,0,0,0,0,0]))
Out[333]: []
In [334]: list(itertools.compress('ABCDEF', [1,0,0,0,0,0,0,1, 1, 1, 1, 1]))
Out[334]: ['A']
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 252/338
13/11/2016 python Basic and Intermediate Level Modules
Exceptions
Almost all programming languages, except shell scripting and some scripting languages, possess exception
handling capabilities.
There are two kinds of errors in Python.
1. error code If something went wrong, the resulting error code is 1 to indicate the failure of a call.
2. Exception Used to handle exceptional cases.
In Python, the errors are handled by the interpreter by raising an exception and allowing that exception to be
handled.
Exceptions indicate errors and break out of the normal control flow of a program. An exception is raised using
raise statement.
Syntax:
try:
logic
...
except <ExceptionName1>, <alias identifier>:
logic to handle that exception
...
except <ExceptionName2> as <alias identifier>:
logic to handle that exception.
This logic gets executed, if error is not covered
in ExceptionName1 exception
...
else:
logic to execute if
there is no exception
...
finally:
logic to execute either
if exception occurs are not
...
Note : try and except are mandatory blocks. And, else and finally are optional blocks.
In [66]: result = 21/0
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
ZeroDivisionError Traceback (most recent call last)
<ipython‐input‐66‐123e673b3321> in <module>()
‐‐‐‐> 1 result = 21/0
ZeroDivisionError: integer division or modulo by zero
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 253/338
13/11/2016 python Basic and Intermediate Level Modules
In [67]: try:
result = 21/0
except:
print 'An error occurred!'
An error occurred!
This code handles all exceptions. But, we should know the error to do corresponding action
In [68]: try:
result = 21/0
except:
print 'An error occurred'
print 'The error is %s'%(ex)
An error occurred
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
NameError Traceback (most recent call last)
<ipython‐input‐68‐e878884284c3> in <module>()
3 except:
4 print 'An error occurred'
‐‐‐‐> 5 print 'The error is %s'%(ex)
6
NameError: name 'ex' is not defined
Here, the exception was resulted in the exception block
In [69]: try:
result = (1+2.3)/(2*4*0)
except:
print 'An error occurred'
try:
print 'The error is %s'%(ex)
except:
print 'variable "ex" is not defined'
An error occurred
variable "ex" is not defined
In [70]: import exceptions
try:
result = (1+2.3)/(2*4*0)
except exceptions.Exception, ex:
print "The error is ", ex
The error is float division by zero
Ensure that all the exceptions are handled in the code
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 254/338
13/11/2016 python Basic and Intermediate Level Modules
In [71]: try:
result = (1+2.3)/(2*4*0)
except ZeroDivisionError, ex: # better handling of exception
print "The error is ", repr(ex)
print "The error is ", ex
The error is ZeroDivisionError('float division by zero',)
The error is float division by zero
In [72]: try:
result = (w)*(1+2.3)/(2*4*0)
except ZeroDivisionError, ex: # better handling of exception
print "The error is ", ex
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
NameError Traceback (most recent call last)
<ipython‐input‐72‐d6eb5a1e6e41> in <module>()
1 try:
‐‐‐‐> 2 result = (w)*(1+2.3)/(2*4*0)
3 except ZeroDivisionError, ex: # better handling of exception
4 print "The error is ", ex
NameError: name 'w' is not defined
Interview Question : If there are two errors, suppose ZeroDivisionError and NameError, which error will be
resulted
In [73]: try:
result = (w)*(1+2.3)/(2*4*0)
except ZeroDivisionError, ex: # better handling of exception
print "The error is ", ex
print "The error is ", repr(ex)
except NameError, ex:
print "The error is ", ex
print "The error is ", repr(ex)
The error is name 'w' is not defined
The error is NameError("name 'w' is not defined",)
There should be a except to accept any unknown exception
In [74]: try:
result = (w)*(1+2.3)/(2*4*0)
except ZeroDivisionError, ex: # better handling of exception
print "The ZeroDivisionError is ", ex
except NameError, ex:
print "The NameError is ", ex
except exceptions.Exception, ex:
print "The other error is ", ex
The NameError is name 'w' is not defined
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 255/338
13/11/2016 python Basic and Intermediate Level Modules
control flow:
when there is no exception:
try ‐> else ‐> finally
when there is exception:
try ‐> except ‐> finally
In [75]: try:
result = (w)*(1+2.3)/(2*4*0)
except ZeroDivisionError, ex: # better handling of exception
print "The ZeroDivisionError is ", ex
except NameError, ex:
print "The NameError is ", ex
except exceptions.Exception, ex:
print "The other error is ", ex
else:
print "try block executed successfully"
print "The result is ", result
finally:
print "Completed the try exception block"
The NameError is name 'w' is not defined
Completed the try exception block
In [76]: try:
result = (9)*(1+2.3)/(2*4*10)
except ZeroDivisionError, ex: # better handling of exception
print "The ZeroDivisionError is ", ex
except NameError, ex:
print "The NameError is ", ex
except exceptions.Exception, ex:
print "The other error is ", ex
else:
print "try block executed successfully"
print "The result is ", result
finally:
print "Completed the try exception block"
try block executed successfully
The result is 0.37125
Completed the try exception block
As 'finally' gets executed in either case, it is seldom used. finally is generally used for cleanup action
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 256/338
13/11/2016 python Basic and Intermediate Level Modules
In [77]: try:
x = float(raw_input("Your number: "))
inverse = 1.0 / x
finally:
print("There may or may not have been an exception.")
print "The inverse: ", inverse
Your number: 0.0
There may or may not have been an exception.
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
ZeroDivisionError Traceback (most recent call last)
<ipython‐input‐77‐cd0c760fc506> in <module>()
1 try:
2 x = float(raw_input("Your number: "))
‐‐‐‐> 3 inverse = 1.0 / x
4 finally:
5 print("There may or may not have been an exception.")
ZeroDivisionError: float division by zero
Here, exception is throwed, as except block is missing
In [78]: try:
x = float(raw_input("Your number: "))
inverse = 1.0 / x
except exceptions.Exception, ex:
print "The error is ", ex
finally:
print("There may or may not have been an exception.")
print "The inverse: ", inverse
Your number: 12
There may or may not have been an exception.
The inverse: 0.0833333333333
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 257/338
13/11/2016 python Basic and Intermediate Level Modules
Builtin exceptions:
‐ Exception ‐ root of all exceptions
‐ SystemExit ‐ generated by sys.exit()
‐ StopIteration ‐ Raised to stop iteration
‐ StandardError ‐ Base of all built‐in exceptions
‐ ArithmeticError ‐ Base for arithmetic exceptions
‐ FloatingPointError ‐ faliture of a floating‐point operation
‐ OverflowError ‐ Arithmetic overflow
‐ ZeroDivisionError ‐ Division or modulus operation with 0
‐ AssertionError ‐ Raised by assert statement
‐ AttributeError ‐ Raised when an attribute name is inval
id
‐ EnvironmentError ‐ Errors that occur externally to python
‐ IOError ‐ I/O or file‐related error
‐ OSError ‐ Operating System error
‐ EOFError ‐ Raised when end of file is reached
‐ ImportError ‐ Failure of import statement
‐ KeyboardInterrupt ‐ Generated by interrupt key (ctrl+C or
ctrl+D)
‐ LookupError ‐ Indexing and key errors
‐ IndexError ‐ Out‐of‐range sequence offset
‐ KeyError ‐ Non‐existent dictionary key
‐ MemoryError ‐ Out of memory error
‐ NameError ‐ Failure to find a local or global name
‐ UnboundLocalError ‐ unbound local variable
‐ ReferenceError ‐ Weak reference used after referent des
troyed
‐ RuntimeError ‐ A generic catch‐all error
‐ NotImplementedError ‐ unimplemented feature
‐ SyntaxError ‐ Parsing Error
‐ IndentationError ‐ Indentation error
‐ TabError ‐ Inconsistent tab usage(generated with
‐tt option)
‐ SystemError ‐ Non‐fatal system error in interpreter
‐ TypeError ‐ Passing an inappropriate type to an op
eration
‐ ValueError ‐ Invalid type
‐ UnicodeError ‐ unicode error
‐ UnicodeDecodeError ‐ unicode decoding error
‐ UnicodeEncodeError ‐ unicode encoding error
‐ UnicodeTranslateError ‐ unicode translation error
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 258/338
13/11/2016 python Basic and Intermediate Level Modules
In [80]: try:
result = (w)*(1+2.3)/(2*4*0) # This statement contains both NameErro
r and ZeroDivisionError
except NameError, ex:
print "The NameError is ", ex
except ZeroDivisionError, ex: # better handling of exception
print "The ZeroDivisionError is ", ex
except StandardError, ex:
print "All Standard Errors are handled here"
print "The error is ",ex
except exceptions.Exception, ex:
print "The other error is ", ex
else:
print "try block executed successfully"
print "The result is ", result
finally:
print "Completed the try exception block"
The NameError is name 'w' is not defined
Completed the try exception block
In the above example, notice that NameError caught the exception, rather than StandardError, due to its
placement preceeding StandardError exception.
In [81]: import exceptions
try:
result = (12)*(1+2.3)/(2*4*0) # This statement contains ONLY ZeroDiv
isionError
except exceptions.Exception, ex: # It handles all exceptions
print "ALL the errors are handled here"
print "The other error is ", ex
except StandardError, ex: # handles only Standard Errors
print "All Standard Errors are handled here"
print "The error is ",ex
except ZeroDivisionError, ex:
print "The ZeroDivisionError is ", ex
except NameError, ex:
print "The NameError is ", ex
else:
print "try block executed successfully"
print "The result is ", result
finally:
print "Completed the try exception block"
ALL the errors are handled here
The other error is float division by zero
Completed the try exception block
In the above scenario, notice that Exception method of exceptions module is handling all the exceptions,
rather than the StandardError exception, due to its heirarchy.
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 259/338
13/11/2016 python Basic and Intermediate Level Modules
In [82]: import exceptions
try:
result = (12)*(1+2.3)/(2*4*0) # This statement contains ONLY ZeroDiv
isionError
except StandardError, ex: # handles only Standard Errors
print "All Standard Errors are handled here"
print "The error is ",ex
except ZeroDivisionError, ex:
print "The ZeroDivisionError is ", ex
except NameError, ex:
print "The NameError is ", ex
except exceptions.Exception, ex: # It handles all exceptions
print "ALL the errors are handled here"
print "The other error is ", ex
else:
print "try block executed successfully"
print "The result is ", result
finally:
print "Completed the try exception block"
All Standard Errors are handled here
The error is float division by zero
Completed the try exception block
In [84]: ### !/usr/bin/python
# exceptionsExample1.py
import exceptions
try:
a = int(input('please enter your number:'))
except NameError:
print "we should not enter zero" # It is a logic error. Logical erro
rs can't be handled
else:
print "the number a:%d" %(a)
finally:
print "finally clause"
please enter your number:12
the number a:12
finally clause
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 260/338
13/11/2016 python Basic and Intermediate Level Modules
In [85]: #!/usr/bin/python
# exceptionsExample1.py
import exceptions
try:
a = int(input('please enter your number:'))
except NameError as ex:
print 'NameError occurred'
print ex
else:
print "the number a:%d" %(a)
finally:
print "finally clause"
please enter your number:'python'
finally clause
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
ValueError Traceback (most recent call last)
<ipython‐input‐85‐200be7b5394b> in <module>()
4
5 try:
‐‐‐‐> 6 a = int(input('please enter your number:'))
7 except NameError as ex:
8 print 'NameError occurred'
ValueError: invalid literal for int() with base 10: 'python'
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 261/338
13/11/2016 python Basic and Intermediate Level Modules
In [86]: #!/usr/bin/python
# exceptionsExample2.py
try:
age = input('please enter your age:')
print "my age is:", age
except NameError,error:
print "please enter your age in numeric"
except:
print 'someElse error'
print "‐‐‐‐‐ report ‐‐‐‐‐‐‐‐"
print "We got the following error : %s" %(error)
# identifier 'error' is being used outside of the try‐except blocks
please enter your age:30
my age is: 30
‐‐‐‐‐ report ‐‐‐‐‐‐‐‐
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
NameError Traceback (most recent call last)
<ipython‐input‐86‐0831f7fcbb6b> in <module>()
12
13 print "‐‐‐‐‐ report ‐‐‐‐‐‐‐‐"
‐‐‐> 14 print "We got the following error : %s" %(error)
15 # identifier 'error' is being used outside of the try‐exce
pt blocks
NameError: name 'error' is not defined
In [87]: #!/usr/bin/python
import sys
try:
value1 = input("Please enter the value1:")
value2 = input("Please enter the value2:")
except NameError,error:
print "Please enter only numbers !!!"
print "ERROR: %s" %(error)
Please enter the value1:12
Please enter the value2:python
Please enter only numbers !!!
ERROR: name 'python' is not defined
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 262/338
13/11/2016 python Basic and Intermediate Level Modules
In [88]: #!/usr/bin/python
try:
a = input('please enter your number 1:')
b = input('please enter your number 2:')
except NameError,error:
print "please enter numbers only \n"
print "exception:", error
else:
print "You enter the right number a:%d b:%d" %(a,b)
#try:
# print "division of both numbers:" , a/b
#except ZeroDivisionError:
# print "we cannot divide by zero"
please enter your number 1:123
please enter your number 2:456
You enter the right number a:123 b:456
In [89]: #!/usr/bin/python
try:
num1 = int(raw_input("please enter a number1:"))
num2 = int(raw_input("please enter a number2:"))
except ValueError:
print "Please enter a number[0‐9]"
else:
print num1,num2
please enter a number1:python
Please enter a number[0‐9]
In [91]: #!/usr/bin/python
import sys
try:
value1 = input("Please enter the value1:")
value2 = input("Please enter the value2:")
except NameError:
print "Please enter only numbers !!!"
sys.exit(1)
except exceptions.Exception, ex: # It handles all exceptions
print "ALL the errors are handled here"
print "The other error is ", ex
else:
print "The division of two numbers:" , value1/value2*1.0
Please enter the value1:124
Please enter the value2:345
The division of two numbers: 0.0
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 263/338
13/11/2016 python Basic and Intermediate Level Modules
In [92]: #!/usr/bin/python
import sys
try:
value1 = input("Please enter the value1:")
value2 = input("Please enter the value2:")
except NameError:
print "Please enter only numbers !!!"
sys.exit(1)
except exceptions.Exception, ex: # It handles all exceptions
print "ALL the errors are handled here"
print "The other error is ", ex
else:
print "The division of two numbers:" , value1/value2*1.0
Please enter the value1:123ADFEDF
ALL the errors are handled here
The other error is unexpected EOF while parsing (<string>, line 1)
In [93]: del value1, value2
In [94]: #!/usr/bin/python
try:
value1 = input("Please enter your first number: ")
value2 = input("please enter your second number: ")
except NameError:
print "please enter numbers only \n"
try:
print "division of two numbers is : " , float(value1)/value2
except (NameError,ZeroDivisionError): # handling these two execp
tions together
print " \n please enter a valid number"
Please enter your first number: 919
please enter your second number: 234
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 264/338
13/11/2016 python Basic and Intermediate Level Modules
Multiple Exception Handling:
try:
<logic>
except TypeError, ex:
<logic to handle Type errors>
except IOError, ex:
<logic to handle IO errors>
except NameError, ex:
<logic to handle name errors>
except Exception, ex:
<logic to handle any other error>
Also, single handler can catch multiple exception types.
try:
<logic>
except (IOError, TypeError, NameError), ex:
<logic to handle IOError, TypeError, NameError>
In [95]: #!/usr/bin/python
try:
value1 = int(raw_input("please enter number 1:"))
value2 = int(raw_input("please enter number 2:"))
except ValueError:
print "Buddy.. its number \n"
try:
print "division of numbers", value1/value2
except ValueError,error:
print "Buddy .. no number given .. try again .. \n"
print "ERROR:{}".format(error)
except ZeroDivisionError,error:
print "Zero is not the number you would enter \n"
print "ERROR:{}".format(error)
except NameError,error:
print "value is not defined"
print "ERROR:{}".format(error)
else:
print "The division of numbers is success \n"
please enter number 1:12A
Buddy.. its number
division of numbers 3
The division of numbers is success
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 265/338
13/11/2016 python Basic and Intermediate Level Modules
In [96]: #!/usr/bin/python
try:
value1 = int(raw_input("please enter number 1:"))
value2 = int(raw_input("please enter number 2:"))
except:
print "Buddy.. its number \n"
try:
print "division of numbers", value1/value2
except (ValueError,ZeroDivisionError, NameError),error:
print "Buddy .. it is either ValueError,ZeroDivisionError, NameError ..
try again .. \n"
print "ERROR:{}".format(error)
else:
print "The division of numbers is success \n"
please enter number 1:111
please enter number 2:0.0
Buddy.. its number
division of numbers 0
The division of numbers is success
Raising exceptions
raise instance
raise class
In [97]: raise
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐97‐26814ed17a01> in <module>()
‐‐‐‐> 1 raise
TypeError: exceptions must be old‐style classes or derived from BaseExceptio
n, not NoneType
In [98]: raise IOError
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
IOError Traceback (most recent call last)
<ipython‐input‐98‐f6cf32b12b43> in <module>()
‐‐‐‐> 1 raise IOError
IOError:
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 266/338
13/11/2016 python Basic and Intermediate Level Modules
In [99]: raise KeyboardInterrupt
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
KeyboardInterrupt Traceback (most recent call last)
<ipython‐input‐99‐7d145351408f> in <module>()
‐‐‐‐> 1 raise KeyboardInterrupt
KeyboardInterrupt:
In [100]: raise MemoryError("The memory is running out of space")
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
MemoryError Traceback (most recent call last)
<ipython‐input‐100‐9c0834b76ffd> in <module>()
‐‐‐‐> 1 raise MemoryError("The memory is running out of space")
MemoryError: The memory is running out of space
In [101]: try:
a = int(input("Enter a positive integer: "))
if a <= 0:
raise ValueError("That is not a positive number!")
except ValueError as ve:
print(ve)
Enter a positive integer: ‐89
That is not a positive number!
In [103]: #!/usr/bin/python
size = int(raw_input("please enter the size:"))
if size < 50:
print "we have good amount of space"
if size > 50 and size < 80:
raise UserWarning,"We are hitting 80 percentage on disk"
if size > 90:
raise UserWarning,"we have a issue with 100 full space"
please enter the size:69
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
UserWarning Traceback (most recent call last)
<ipython‐input‐103‐ec1f0799c490> in <module>()
6 print "we have good amount of space"
7 if size > 50 and size < 80:
‐‐‐‐> 8 raise UserWarning,"We are hitting 80 percentage on disk"
9 if size > 90:
10 raise UserWarning,"we have a issue with 100 full space"
UserWarning: We are hitting 80 percentage on disk
Raising custom exceptions
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 267/338
13/11/2016 python Basic and Intermediate Level Modules
In [104]: print 'Navya'
Navya
In [105]: 'Navya'
Out[105]: 'Navya'
In [106]: Navya
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
NameError Traceback (most recent call last)
<ipython‐input‐106‐82ddaec09024> in <module>()
‐‐‐‐> 1 Navya
NameError: name 'Navya' is not defined
In [107]: raise NameError("This is a name error") # python 2 and python 3
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
NameError Traceback (most recent call last)
<ipython‐input‐107‐b2d352285537> in <module>()
‐‐‐‐> 1 raise NameError("This is a name error") # python 2 and python 3
NameError: This is a name error
In [108]: raise NameError, "This is a name error" # only in python 2.x
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
NameError Traceback (most recent call last)
<ipython‐input‐108‐1da8dbca750e> in <module>()
‐‐‐‐> 1 raise NameError, "This is a name error" # only in python 2.x
NameError: This is a name error
exception need to be a class object
In [109]: class Naseer(Exception(" This is Naseer exception")):
pass
In [110]: raise Naseer
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
Exception Traceback (most recent call last)
<ipython‐input‐110‐033e3c8c976f> in <module>()
‐‐‐‐> 1 raise Naseer
Exception: ('Naseer', (Exception(' This is Naseer exception',),), {'__module_
_': '__main__'})
In [111]: import exceptions
class Naseer(exceptions.Exception(" This is Naseer exception")):
pass
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 268/338
13/11/2016 python Basic and Intermediate Level Modules
Defining custom exceptions
All builtin exceptions are defined in terms of classes.
To create a new exception, create a new calss definition that inherits from exceptions.Exception
In [112]: #Ex1:
class Networkerror(RuntimeError):
def __init__(self, arg):
self.args = arg
try:
raise Networkerror("Bad hostname")
except Networkerror,e:
print e.args
('B', 'a', 'd', ' ', 'h', 'o', 's', 't', 'n', 'a', 'm', 'e')
In [113]: #Ex2:
import exceptions
#Exception class
class NetworkError(exceptions.Exception):
def __init__(self, errno, msg):
self.args = (errno, msg)
self.errno = errno
self.errno = msg
# Raises an exception (multiple arguments)
def error2():
raise NetworkError(1, 'Host not found')
# Raises an exception (multiple arguments supplied as a tuple)
def error3():
raise NetworkError, (1, 'Host not found')
In [114]: error2() # function call
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
NetworkError Traceback (most recent call last)
<ipython‐input‐114‐c024a2970039> in <module>()
‐‐‐‐> 1 error2() # function call
<ipython‐input‐113‐8077a043d45e> in error2()
10 # Raises an exception (multiple arguments)
11 def error2():
‐‐‐> 12 raise NetworkError(1, 'Host not found')
13
14 # Raises an exception (multiple arguments supplied as a tuple)
NetworkError: (1, 'Host not found')
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 269/338
13/11/2016 python Basic and Intermediate Level Modules
Asserts
used to introduce debugging code into the program.
If the testlogic evaluates to False, assert raises an AssertionError exception with the optional data
supplied.
Syntax:
if not <some_test>:
raise AssertionError(<message>)
(or)
assert <some_test>, <message>
In [115]: # Ex1:
x = 5
y = 3
assert x<y, "x has to be smaller than y"
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
AssertionError Traceback (most recent call last)
<ipython‐input‐115‐9bec1dfa8fff> in <module>()
2 x = 5
3 y = 3
‐‐‐‐> 4 assert x<y, "x has to be smaller than y"
AssertionError: x has to be smaller than y
In [116]: assert y,x
In [117]: assert 67>89
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
AssertionError Traceback (most recent call last)
<ipython‐input‐117‐f937111075ea> in <module>()
‐‐‐‐> 1 assert 67>89
AssertionError:
Assertions are not checked when python runs in optimized mode (i.e., with o option).
python ‐o scriptName.py
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 270/338
13/11/2016 python Basic and Intermediate Level Modules
Hint: assert should not be used to catch programming errors like x / 0, because Python traps such
programming errors itself!.
Assert should be used for trapping userdefined constraints!
Working with files
File operation modes
r read only
w write only
a appending the data
Note: If you open an existing file with 'w' mode, it's existing data get vanished.
r+ both for read and write
a+ both for read and append
In windows, the data is stored in binary format. Placing this 'b' doesn't effect in unix and linux.
rb read only
wb write only
ab append only
ab+ Both reading and appending data
Default file operation is read only.
Accessing a file
Taking a sample file, named test.txt
test.txt
Python programming is interesting
It is coming with batteries, in built
It means that almost every operation has a module !
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 271/338
13/11/2016 python Basic and Intermediate Level Modules
In [118]: str1 = "Python programming is interesting\n\
It is coming with batteries, in built\n\
It means that almost every operation has a module !\n\
"
fileHandler = open('test.txt', 'wb')# creating a new file
fileHandler.write(str1)
fileHandler.close()
In [119]: import os; os.listdir(os.getcwd())
Out[119]: ['.ipynb_checkpoints',
'desktop.ini',
'fibGenerator.py',
'fibGenerator.pyc',
'fileName.py',
'fileName.pyc',
'first',
'myfile.pyw',
'myNewFile.tsf',
'myNewFolder',
'newFolder',
'newScript.py',
'newScript.pyc',
'python ‐ Basic Level Module.ipynb',
'python+‐+Basic+Level+Module.html',
'test.txt']
In [120]: f = open('test.txt', 'rb') # Opening an existing file for reading
data1 = f.readline() # reads one line
f.close()
print type(data1), data1
<type 'str'> Python programming is interesting
In [122]: f = open('test.txt', 'rb')
data2 = f.readlines() # reads all lines, but results list of each line, a
s a string
f.close()
print type(data2), '\n',data2
<type 'list'>
['Python programming is interesting\n', 'It is coming with batteries, in buil
t\n', 'It means that almost every operation has a module !\n']
In [123]: f = open('test.txt', 'rb')
data3 = f.read() # reads entire file as a single string
f.close()
print type(data3), "\n", data3
<type 'str'>
Python programming is interesting
It is coming with batteries, in built
It means that almost every operation has a module !
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 272/338
13/11/2016 python Basic and Intermediate Level Modules
Interview Question : what is the advantage of performing file operations with context manager
In [124]: with open('test.txt', 'rb') as f: # file operation with context manager
data4 = f.read()
f.close()
print type(data4), data4
<type 'str'> Python programming is interesting
It is coming with batteries, in built
It means that almost every operation has a module !
Interview Question : How to add content add the end of file (EOF) in a file?
In [126]: with open('test.txt', 'ab') as f:
f.write("This is some line")
f.close()
with open('test.txt', 'ab') as f:
f.write("\n This is another line")
# Observe the importance of '\n' escape sequence character, here.
f.close()
with open('test.txt', 'rb+') as g:
data5 = g.read()
g.close()
print type(data5), '\n', data5
<type 'str'>
Python programming is interesting
It is coming with batteries, in built
It means that almost every operation has a module !
This is some line
This is another lineThis is some line
This is another line
In [127]: with open('test.txt', 'wb') as f:
f.write("\n This is another line")
f.close()
with open('test.txt', 'rb+') as g:
data6 = g.read()
g.close()
print type(data6), "\n", data6
# Observe that existing data is deleted, as the file is opened in write mode
<type 'str'>
This is another line
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 273/338
13/11/2016 python Basic and Intermediate Level Modules
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 274/338
13/11/2016 python Basic and Intermediate Level Modules
In [128]: #!/usr/bin/python
# fileOperations.py
'''
Purpose: File operations demonstration
'''
# accessing an exising file
f = open('test.txt', 'rb')
# 'f' is the file handler
print f, type(f)
# reading the data present in the test.txt
data = f.read()
print "data = ", data
print 'Again trying to print the data from file'
data = f.read()
print "data = ", data
print 'The current position of cursor in file is ', f.tell()
print 'moving the cursor position to 0'
f.seek(0)
print 'The current position of cursor in file is ', f.tell()
print 'The first 12 characters in the file are ', f.read(12)
print 'The next 6 characters in the file are \n', f.read(6)
print 'The current line in file is \n', f.readline()
print 'The current line in file is \n', f.readline()
print 'checking whether file is closed or not'
print 'return True, if the file is closed', f.closed
f.close()
print 'checking whether file is closed or not'
print 'return True, if the file is closed', f.closed
try:
f.read() #No operation can be performed on a closed file object, as the ob
ject gets dereferenced
# garbage collector deletes all the unreferenced objects
except ValueError, ve:
print ve
print "IO operation can't be performed on closed file handler"
g = open('test.txt', 'wb') # opening existing file in read mode will erase i
ts existing data.
try:
datag = g.read()
print "datag = ", datag
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 275/338
13/11/2016 python Basic and Intermediate Level Modules
except IOError, ex:
print ex
print 'opened file in write mode. can not read the data'
g.write('Python programming is interesting\n')
g.write('It is coming with batteries, in built\n')
g.write('It means that almost every operation has a module !')
g.close() # it is not mandatory , but extremely recommended.
# python interpreter with close the file, but
# IronPython, Jython, ... may not close the file automatically.
# Using Context manager for file handling
with open('test.txt', 'ab+') as f:
print 'The cursor position is at %d'%(f.tell())
dataf = f.read()
print 'The cursor position is at %d' % (f.tell())
print 'The content of the data is \n', dataf
# append mode supports both read and write operations
print 'The cursor position is at %d' % (f.tell())
print f.read(123)
f.write('This is last line')
print 'The cursor position is at %d' % (f.tell())
f.close()
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 276/338
13/11/2016 python Basic and Intermediate Level Modules
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 277/338
13/11/2016 python Basic and Intermediate Level Modules
<open file 'test.txt', mode 'rb' at 0x038AF758> <type 'file'>
data =
This is another line
Again trying to print the data from file
data =
The current position of cursor in file is 22
moving the cursor position to 0
The current position of cursor in file is 0
The first 12 characters in the file are
This is an
The next 6 characters in the file are
other
The current line in file is
line
The current line in file is
checking whether file is closed or not
return True, if the file is closed False
checking whether file is closed or not
return True, if the file is closed True
I/O operation on closed file
IO operation can't be performed on closed file handler
File not open for reading
opened file in write mode. can not read the data
The cursor position is at 0
The cursor position is at 123
The content of the data is
Python programming is interesting
It is coming with batteries, in built
It means that almost every operation has a module !
The cursor position is at 123
The cursor position is at 140
Assignment : Try to open the same file in two different modes, in parallel, and observe the problem occurring
Assignment : Write a script for camel casing to underscore casing, and vice versa; need to be done on an
existing .py file. Ensure that functions imported from modules, are not disturbed.
Working with CSV files
Taking a sample csv file
sampleCSVFile.csv
fruits, vegetables, cars
Apple, Cabbagge, Benz
Mango, Cucumber, Volvo
Banana, Raddish, Maruthi suzuki
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 278/338
13/11/2016 python Basic and Intermediate Level Modules
Creating a csv file
In [129]: with open('sampleCSVFile.csv', 'ab+') as myCsv:
myCsv.write("fruits, vegetables, cars\n")
myCsv.write("Apple, Cabbagge, Benz\n")
myCsv.write("Mango, Cucumber, Volvo\n")
myCsv.write("Banana, Raddish, Maruthi suzuki\n")
myCsv.close()
In [130]: import os;
print os.listdir(os.getcwd())
['.ipynb_checkpoints', 'desktop.ini', 'fibGenerator.py', 'fibGenerator.pyc',
'fileName.py', 'fileName.pyc', 'first', 'myfile.pyw', 'myNewFile.tsf', 'myNe
wFolder', 'newFolder', 'newScript.py', 'newScript.pyc', 'python ‐ Basic Level
Module.ipynb', 'python+‐+Basic+Level+Module.html', 'sampleCSVFile.csv', 'tes
t.txt']
In [131]: with open('sampleCSVFile.csv', 'rb') as c:
data = c.read()
c.close()
print type(data), '\n', data
<type 'str'>
fruits, vegetables, cars
Apple, Cabbagge, Benz
Mango, Cucumber, Volvo
Banana, Raddish, Maruthi suzuki
In [132]: import csv
In [133]: print dir(csv)
['Dialect', 'DictReader', 'DictWriter', 'Error', 'QUOTE_ALL', 'QUOTE_MINIMA
L', 'QUOTE_NONE', 'QUOTE_NONNUMERIC', 'Sniffer', 'StringIO', '_Dialect', '__a
ll__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__v
ersion__', 'excel', 'excel_tab', 'field_size_limit', 'get_dialect', 'list_dia
lects', 're', 'reader', 'reduce', 'register_dialect', 'unregister_dialect',
'writer']
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 279/338
13/11/2016 python Basic and Intermediate Level Modules
In [134]: #!/usr/bin/python
# workingWithCSV.py
import csv
'''
Purpose : Working with CSV files
'''
# with is called as a context manager
with open('sampleCSVFile.csv') as csvFile:
data = csv.reader(csvFile, delimiter = ',')
print data # it is an iterator object
for row in data:
#print row
print row[0]
csvFile.close()
<_csv.reader object at 0x038797F0>
fruits
Apple
Mango
Banana
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 280/338
13/11/2016 python Basic and Intermediate Level Modules
In [135]: with open('sampleCSVFile.csv') as csvFile:
readCSV = csv.reader(csvFile, delimiter=',') # delimiter
print readCSV
print type(readCSV)
for row in readCSV:
print "row ‐‐> ", row
print "row[0] ‐‐> ",row[0]
print "row[0], row[1] ‐‐> ",row[0], row[1]
print '‐'*70
csvFile.close()
# It is recommended to close the file, after it's use.
# It deletes that file object.
# so, file handler can't be used, after its closure.
<_csv.reader object at 0x038799F0>
<type '_csv.reader'>
row ‐‐> ['fruits', ' vegetables', ' cars']
row[0] ‐‐> fruits
row[0], row[1] ‐‐> fruits vegetables
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
row ‐‐> ['Apple', ' Cabbagge', ' Benz']
row[0] ‐‐> Apple
row[0], row[1] ‐‐> Apple Cabbagge
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
row ‐‐> ['Mango', ' Cucumber', ' Volvo']
row[0] ‐‐> Mango
row[0], row[1] ‐‐> Mango Cucumber
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
row ‐‐> ['Banana', ' Raddish', ' Maruthi suzuki']
row[0] ‐‐> Banana
row[0], row[1] ‐‐> Banana Raddish
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
Assignment : write a function to display all the cars, in the sampleCSVFile.csv
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 281/338
13/11/2016 python Basic and Intermediate Level Modules
In [136]: with open('sampleCSVFile.csv') as csvFile1:
data = csv.reader(csvFile1, delimiter=',')
print '\n',data
for row in data:
#cars = row[2]
(fruits, vegetables, cars) = row # tuple‐ unpacking
print fruits, vegetables, cars
csvFile1.close()
print "outside the loop"
print fruits, vegetables, cars
<_csv.reader object at 0x03879AB0>
fruits vegetables cars
Apple Cabbagge Benz
Mango Cucumber Volvo
Banana Raddish Maruthi suzuki
outside the loop
Banana Raddish Maruthi suzuki
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 282/338
13/11/2016 python Basic and Intermediate Level Modules
In [137]: with open('sampleCSVFile.csv') as csvFile1:
data = csv.reader(csvFile1, delimiter=',')
print '\n',data
#vegetables = fruits = cars = []
#It will result in all these objects will point to the same location
vegetables = []
fruits = []
cars = []
#for i in dir(data):
# print i,
for index, row in enumerate(data):
if index == 0:
continue # to skip first iteration
fruits.insert(index,row[0])
#print fruits
vegetables.insert(index,row[1])
cars.insert(index,row[2])
#print row, type(row)
#print row[0], type(row[0])
#fruits.append(row[0])
#print fruits.append(row[0])
#print vegetables.append(row[1])
#print cars.append(row[2])
print '‐'*50
print 'fruits :',fruits
print 'vegetables', vegetables
print 'cars : ', cars
print id(fruits), id(vegetables), id(cars)
csvFile1.close()
<_csv.reader object at 0x03879B30>
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
fruits : ['Apple', 'Mango', 'Banana']
vegetables [' Cabbagge', ' Cucumber', ' Raddish']
cars : [' Benz', ' Volvo', ' Maruthi suzuki']
58103848 59318800 59321080
In [138]: import csv
with open('names.csv', 'w') as csvfile:
fieldnames = ['first_name', 'last_name']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'})
writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 283/338
13/11/2016 python Basic and Intermediate Level Modules
In [139]: import csv
inputNames = csv.DictReader(open("names.csv"))
for name in inputNames:
print name
{'first_name': 'Baked', 'last_name': 'Beans'}
{'first_name': 'Lovely', 'last_name': 'Spam'}
{'first_name': 'Wonderful', 'last_name': 'Spam'}
Working with XML
In [140]: from lxml import etree
# create XML
root = etree.Element('root')
root.append(etree.Element('child'))
# another child with text
child = etree.Element('child')
child.text = 'some text'
root.append(child)
# pretty string
s = etree.tostring(root, pretty_print=True)
print s
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
ImportError Traceback (most recent call last)
<ipython‐input‐140‐507ddfa1579b> in <module>()
‐‐‐‐> 1 from lxml import etree
2
3 # create XML
4 root = etree.Element('root')
5 root.append(etree.Element('child'))
ImportError: No module named lxml
In [146]: from xml.etree.ElementTree import Element, SubElement, tostring
root = Element('root')
child = SubElement(root, "child")
child.text = "I am a child"
print tostring(root)
<root><child>I am a child</child></root>
Assignment : work with xml and xls files
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 284/338
13/11/2016 python Basic and Intermediate Level Modules
Byte array
In [150]: sentenceA = "Tomarrow is ours!!!"
print type(sentenceA)
<type 'str'>
In [151]: sentenceB = bytearray("Tomarrow is ours!!!")
print type(sentenceB)
<type 'bytearray'>
NOTE: string objects are immutable, whereas bytearray objects are mutable
In [152]: sentenceA[9:11]
Out[152]: 'is'
In [153]: sentenceA[9:11] = "will be"
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
TypeError Traceback (most recent call last)
<ipython‐input‐153‐e72736eb4fc1> in <module>()
‐‐‐‐> 1 sentenceA[9:11] = "will be"
TypeError: 'str' object does not support item assignment
In [154]: sentenceB[9:11]
Out[154]: bytearray(b'is')
In [155]: sentenceB[9:11] = "will be"
In [156]: print sentenceB
Tomarrow will be ours!!!
In [157]: print sentenceB[1], sentenceA[1]
111 o
In [158]: chr(111)
Out[158]: 'o'
In [159]: ord('o')
Out[159]: 111
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 285/338
13/11/2016 python Basic and Intermediate Level Modules
NOTE: bytearray will store the characters with their corresponding ASCII values
Data Serialization
‐ converting the objects into byte form .
‐ Used for transferring the objects.
‐ Serialization is the process of converting a data structure or object state into
a format that can be stored.
‐ Serialization is also called deflating or marshalling
‐ DeSerialization is also called Inflating or unmarshalling.
Various ways of data serialization
‐ Marshall ‐‐ It is primitive, and no more used.
‐ Pickle ‐‐ Pickle is a standard module which serializes and deserializes a pytho
n object structure.
‐ cPickle ‐‐ c implementation of pickle]
‐ shelve ‐‐ Advanced version, to address the security flaws of pickel/cpickle
‐ xml
‐ json ‐‐ Most popular, now‐a‐days
‐ db
Python 2.x has both pickle and cpickle. Whereas python 3.x has only cPickle, and it is renamed as pickle.
Pickle files has .pkl or .pickle extensions. The pickled data format is python specific.
Interview Question : Difference between compression and serialization ?
Ans: compression may be lossy or lossless process. Whereas Serialization is a lossless reversible process.
compression is used to reduce the data redundancy, whereas serialization is used for inflating or deflating an
object, and communicating data with other languages.
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 286/338
13/11/2016 python Basic and Intermediate Level Modules
In [160]: #!/usr/bin/python
# workingWithPickle.py
import pickle
'''
Purpose: Working with Pickle files
pickling
'''
# Serialization
students = ['Mujeeb', 'Harini', 'Mamatha', 'Ankit', 'Naseer','Shoban', 123]
f = open('Students.pickle', 'ab+')
pickle.dump(students, f)
f.flush()
f.close()
# Deserialization
g = open('Students.pickle', 'rb')
myStudents = pickle.load(g)
print "myStudents are ", myStudents
g.close()
myStudents are ['Mujeeb', 'Harini', 'Mamatha', 'Ankit', 'Naseer', 'Shoban',
123]
Interview Question : what is the difference between dump and dumps methods
In [161]: # serialization
mystud = pickle.dumps(students) # dumping into a string
print mystud
print type(mystud)
(lp0
S'Mujeeb'
p1
aS'Harini'
p2
aS'Mamatha'
p3
aS'Ankit'
p4
aS'Naseer'
p5
aS'Shoban'
p6
aI123
a.
<type 'str'>
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 287/338
13/11/2016 python Basic and Intermediate Level Modules
In [162]: # Deserialization
orgStud = pickle.loads(mystud) # loading from a string
print orgStud
print type(orgStud)
print orgStud == students
['Mujeeb', 'Harini', 'Mamatha', 'Ankit', 'Naseer', 'Shoban', 123]
<type 'list'>
True
In [163]: with open('Students.pickle', 'rb+') as ktf:
myStudents = pickle.load(ktf)
print "myStudents are ", myStudents
myStudents are ['Mujeeb', 'Harini', 'Mamatha', 'Ankit', 'Naseer', 'Shoban',
123]
In conclusion, Pickle and cpickle has their importance in interfacing with c and C++. As pickled data format is
python specific, it is not used in interfacing with other languages.
In [164]: def func():
pass
z = func()
print z, type(z)
print func, type(func)
None <type 'NoneType'>
<function func at 0x03912730> <type 'function'>
In [165]: try:
zz = pickle.dumps(z)
except pickle.PickleError as pe:
print 'The error is ', pe
In [166]: print zz
N.
Interview Question : When a function object is deleted, but the object created with that function call is
retained, will it malfunction, or work properly?
In [167]: del func
print zz
N.
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 288/338
13/11/2016 python Basic and Intermediate Level Modules
In [168]: try:
zz1 = pickle.dumps(z)
except pickle.PickleError as pe:
print 'The error is ', pe
In [169]: print zz1
N.
In [170]: class class1():
pass
b = class1()
pickle.dumps(b)
del class1
print b
<__main__.class1 instance at 0x038FF350>
Though class is deleted, its instance survivies; same as the case with functions
In [171]: pickle.dumps('I am pickling')
Out[171]: "S'I am pickling'\np0\n."
In [172]: pickle.loads("S'I am pickling'\np0\n.")
Out[172]: 'I am pickling'
In [173]: pickle.loads(pickle.dumps('I am pickling'))
Out[173]: 'I am pickling'
Limitations of Pickle
The pickle module is not secure against erroneous or maliciously constructed data.
The pickled data can be modfied onthefly, mainly by Middleman attack.
Never unpickle data received from an untrusted or unauthenticated source.
Shelve
shelve is a tool that uses pickle to store python objects in an accessbykey file system. It is same as
keys in dictionary.
It is used as a simple persistent storage option for python objects when a relational database is
overkill.
The values are pickled and written to a database created and managed by anydbm.
anydbm is a frontend interface to establish communication with database.
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 289/338
13/11/2016 python Basic and Intermediate Level Modules
In [174]: import shelve
In [175]: s= shelve.open('usingShelve.db')
try:
s['key1'] = {'int': 8, 'float': 8.0, 'string': '8'}
except Exception, ex:
print ex
finally:
s.close()
In [176]: # To access the data again,
s = shelve.open('usingShelve.db') # default is read only mode
try:
myShelveContent = s['key1'] # accessing using the key
except Exception, ex1:
print ex1
finally:
s.close()
print 'myShelveContent = ', myShelveContent
myShelveContent = {'int': 8, 'float': 8.0, 'string': '8'}
opening shelve in readonly mode.
In [177]: s = shelve.open('usingShelve.db', flag = 'r')
try:
myShelveContent = s['key1'] # accessing using the key
except Exception, ex1:
print ex1
finally:
s.close()
print 'myShelveContent = ', myShelveContent
myShelveContent = {'int': 8, 'float': 8.0, 'string': '8'}
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 290/338
13/11/2016 python Basic and Intermediate Level Modules
In [178]: s = shelve.open('usingShelve.db', flag = 'r')
try:
print s['key1'] # accessing using the key
s['key1']['newValue'] = 'This is a new value'
# trying to write data in read mode; observe that this line has no reflect
ion
print s['key1']
except Exception, ex1:
print ex1
finally:
s.close()
s = shelve.open('usingShelve.db', flag = 'r')
try:
print s['key1'] # accessing using the key
except Exception, ex1:
print ex1
finally:
s.close()
{'int': 8, 'float': 8.0, 'string': '8'}
{'int': 8, 'float': 8.0, 'string': '8'}
{'int': 8, 'float': 8.0, 'string': '8'}
NOTE: By defaults, shelve do not track modifications to volatile objects. If necessary, open the shelve file in
writeback enabled
In [179]: s = shelve.open('usingShelve.db', writeback=True)
try:
print s['key1'] # accessing using the key
s['key1']['newValue'] = 'This is a new value'
print s['key1']
except Exception, ex1:
print ex1
finally:
s.close()
s = shelve.open('usingShelve.db', flag = 'r')
try:
print s['key1'] # accessing using the key
except Exception, ex1:
print ex1
finally:
s.close()
{'int': 8, 'float': 8.0, 'string': '8'}
{'int': 8, 'float': 8.0, 'string': '8', 'newValue': 'This is a new value'}
{'int': 8, 'float': 8.0, 'string': '8', 'newValue': 'This is a new value'}
Note: Shelve must not be opened with writeback enabled, unless it is essential
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 291/338
13/11/2016 python Basic and Intermediate Level Modules
JSON
JSON is an abbreviation for Java Script Object notation
json is supported by almost all languages.
official website is json.org
stored in .json file. But, it can be stored in other format too, like .template file in AWS cloudformation,
etc.
sample json
{
"employees": {
"employee": [
{
"id": "1",
"firstName": "Tom",
"lastName": "Cruise",
"photo": "http://cdn2.gossipcenter.com/sites/default/files/imagecac
he/story_header/photos/tom‐cruise‐020514sp.jpg"
},
{
"id": "2",
"firstName": "Maria",
"lastName": "Sharapova",
"photo": "http://thewallmachine.com/files/1363603040.jpg"
},
{
"id": "3",
"firstName": "James",
"lastName": "Bond",
"photo": "http://georgesjournal.files.wordpress.com/2012/02/007_at_
50_ge_pierece_brosnan.jpg"
}
]
}
}
In [180]: import json
In [181]: students = {'batch 1' : {'Name': 'Ankit', 'regNumber': 1},
'batch 2' : {'Name': 'Mujeeb', 'regNumber': 2}
}
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 292/338
13/11/2016 python Basic and Intermediate Level Modules
In [182]: print json.dumps(students) # dictionary to json
{"batch 2": {"regNumber": 2, "Name": "Mujeeb"}, "batch 1": {"regNumber": 1,
"Name": "Ankit"}}
In [183]: print json.dumps(students, sort_keys = True)
{"batch 1": {"Name": "Ankit", "regNumber": 1}, "batch 2": {"Name": "Mujeeb",
"regNumber": 2}}
tuple to json array
In [184]: tup1 = ('Red', 'Black', 'white', True, None, [])
json.dumps(tup1)
Out[184]: '["Red", "Black", "white", true, null, []]'
Observe that True is changed to true; and None to null
In [185]: string = 'This is a string'
json.dumps(string)
Out[185]: '"This is a string"'
In [186]: b = True
json.dumps(b)
Out[186]: 'true'
In [187]: a = ‐123
b = ‐2.34
z = 1.3e‐10
In [188]: json.dumps(a)
Out[188]: '‐123'
In [189]: json.dumps(b)
Out[189]: '‐2.34'
In [190]: json.dumps(z)
Out[190]: '1.3e‐10'
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 293/338
13/11/2016 python Basic and Intermediate Level Modules
Interview Question : How different is python dictionary, from that of json?
json is different from dictionary.
‐ All the content within the dictionary must be in key‐value pairs; whereas there c
an be arrays in dictionary.
‐ And, json data types are different from that of python data types.
json doesn't cover all the datatypes of python, mainly tuples and bytes.
Decoding the json data, back to python data types can be achieved using json.loads correspondingly.
Assignment : Use json.loads to correspondingly deserialize it
json to python object conversion pairs:
JSON Python
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
object dict
array list
string str
number(int) int
number(real) float
true True
false False
null None
There are various online json lints to validate a written json file; and online json to other format convertors, like
code Beautify (http://codebeautify.org/jsonviewer/), json formatter (https://jsonformatter.curiousconcept.com/),
etc
Assignment : Go through this Yahoo weblink (https://developer.yahoo.com/python/pythonrest.html) and have
an insight on accessing web content using python.
In [191]: import urllib
url = 'https://developer.yahoo.com/'
u = urllib.urlopen(url)
# u is a file‐like object
data = u.read()
f = open('yahooData.txt', 'ab+')
f.write(data)
f.close()
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 294/338
13/11/2016 python Basic and Intermediate Level Modules
NOTE: Both urllib and urllib serve the same purpose; But, urllib2 module can handle HTTP Errors better than
urllib
In [192]: import urllib2
try:
data = urllib2.urlopen(url).read()
except urllib2.HTTPError, e:
print "HTTP error: %d" % e.code
except urllib2.URLError, e:
print "Network error: %s" % e.reason.args[1]
with open('yahooData1.txt', 'ab+') as g:
g.write(data)
g.close()
webservices: urllib, urllib2, BeautifulSoup (bs4), httplib, cookielib
Debugger in Python
Debugging is essential to understand the call flow in run time. It is also used to debug an error.
There are various debuggers available in python, as listed here
(https://wiki.python.org/moin/PythonDebuggingTools). These debuggers can be used in
1. Interactive mode, or
2. within the IDE
In all the cases, it is not feasible to work with an IDE. ex: Devops jobs of logging into a remote linux/Windows
server, to solve an issue. Especially, in such cases, interactive debuggers such as pdb, ipdb, ... can be helpful.
pydev
Majority of the IDEs will have pydev configured in it.
Basic features of pydev are
step Over
step In
step Out
Placing debugger
Visualizing the objects in debug mode ....
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 295/338
13/11/2016 python Basic and Intermediate Level Modules
pdb
It is the basic interactive Debugger
Features
pause a program
look at the values of variables
watch program execution stepbystep
Usage:
1. In the terminal :
$ python m pdb fileName.py
2. Within the script using pdb module
import pdb
In the script, place the following statement from where we want to make debugging.
pdb.set_trace()
Now, run the program normally
At the output console, it returns pdb prompt, and wait for the commands.
(pdb) l # To list the complete script, irrespective of the line in which
the set_trace() statement is placed.
(pdb) l 1,5 # To list 1st line to 5th line (including) irrespective of place i
n which set_trace() statement is placed.
(pdb) c # Continue execution till a break point is encountered
(pdb) help # To get help find all the options possible with pdb
(pdb) n # Continue execution until the next line in current function is rea
ched or it returns
(pdb) r # continue execution, until the current function returns
(pdb) u # shows the flow. Shows previous step in execution flow. but, it wi
ll not execute
(pdb) d # shows next step in execution flow.
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 296/338
13/11/2016 python Basic and Intermediate Level Modules
Most commonly used among them are:
l(ist)
n(ext)
c(ontinue)
s(tep)
r(eturn)
b(reak)
pdb ? ‐ to get help
pdb l ‐ show the cursor position
pdb l 18 ‐ to list line 18 in file
pdb passesLeft ‐ to get the number of passes left
pdb <any variable> ‐ to get the value in variable
pdb b 18 ‐ to place a breakpoint
pdb l
pdb n ‐ to execute next step
pdb comes with four modes of operation:
‐ Script, postmortem, run and Trace modes
Working with pdb, within the python scripts
save the below scripts, and execute them in terminal, like general python scripts.
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 297/338
13/11/2016 python Basic and Intermediate Level Modules
In [193]: #!/usr/bin/python
# first.py
import pdb
version = '3.0'
def hello():
''' this is just for printing hello '''
print "hello today is modules class"
def add(a=1,b=2):
''' this is an addition program '''
sum = a + b
return sum
pdb.set_trace()
if __name__ == '__main__':
hello()
sum = add()
sum1 = add(5,6)
print sum1
print sum
print version
else:
print "Hello this has to be part of my modules"
‐‐Return‐‐
> <ipython‐input‐193‐ca0a9d73001e>(14)<module>()‐>None
‐> pdb.set_trace()
(Pdb) l
9 ''' this is an addition program '''
10 sum = a + b
11 return sum
12
13
14 ‐> pdb.set_trace()
15 if __name__ == '__main__':
16 hello()
17 sum = add()
18 sum1 = add(5,6)
19 print sum1
(Pdb) l 9,15
9 ''' this is an addition program '''
10 sum = a + b
11 return sum
12
13
14 ‐> pdb.set_trace()
15 if __name__ == '__main__':
(Pdb) n
> c:\python27\lib\site‐packages\ipython\core\interactiveshell.py(2884)run_cod
e()
‐> sys.excepthook = old_excepthook
(Pdb) c
hello today is modules class
11
3
3.0
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 298/338
13/11/2016 python Basic and Intermediate Level Modules
In [194]: #!/usr/bin/python
# second.py
import pdb
pdb.set_trace()
import first as f
print f.hello()
print f.add(10,20)
print f.version
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 299/338
13/11/2016 python Basic and Intermediate Level Modules
‐‐Return‐‐
> <ipython‐input‐194‐6c3a48b9f2b1>(4)<module>()‐>None
‐> pdb.set_trace()
(Pdb) help
Documented commands (type help <topic>):
========================================
EOF bt cont enable jump pp run unt
a c continue exit l q s until
alias cl d h list quit step up
args clear debug help n r tbreak w
b commands disable ignore next restart u whatis
break condition down j p return unalias where
Miscellaneous help topics:
==========================
exec pdb
Undocumented commands:
======================
retval rv
(Pdb) ?
Documented commands (type help <topic>):
========================================
EOF bt cont enable jump pp run unt
a c continue exit l q s until
alias cl d h list quit step up
args clear debug help n r tbreak w
b commands disable ignore next restart u whatis
break condition down j p return unalias where
Miscellaneous help topics:
==========================
exec pdb
Undocumented commands:
======================
retval rv
(Pdb) b 6
Breakpoint 1 at <ipython‐input‐194‐6c3a48b9f2b1>:6
(Pdb) l
1 #!/usr/bin/python
2 # second.py
3 import pdb
4 ‐> pdb.set_trace()
5 import first as f
6 B print f.hello()
7 print f.add(10,20)
8 print f.version
[EOF]
(Pdb) b 7
Breakpoint 2 at <ipython‐input‐194‐6c3a48b9f2b1>:7
(Pdb) c
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 300/338
13/11/2016 python Basic and Intermediate Level Modules
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
ImportError Traceback (most recent call last)
<ipython‐input‐194‐6c3a48b9f2b1> in <module>()
3 import pdb
4 pdb.set_trace()
‐‐‐‐> 5 import first as f
6 print f.hello()
7 print f.add(10,20)
ImportError: No module named first
Note: You can observe some code which is getting executed here, though it is not part of our second.py. It is
beacuse of ipython.
Also, with this debugging, we clearly identified that 'first.py' is not located in the current working directory.
Now, after placing init.py file in 'debugging' folder, It got executed.
In [196]: #!/usr/bin/python
# second.py
import pdb
pdb.set_trace()
import debugging.first as f
print f.hello()
print f.add(10,20)
print f.version
‐‐Return‐‐
> <ipython‐input‐196‐977263d8e280>(4)<module>()‐>None
‐> pdb.set_trace()
(Pdb) c
> c:\users\home\google drive\python\tut\complete material\debugging\first.py
(15)<module>()
‐> if __name__ == '__main__':
(Pdb) c
Hello this has to be part of my modules
hello today is modules class
None
30
3.0
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 301/338
13/11/2016 python Basic and Intermediate Level Modules
In [1]: #!/usr/bin/python
# third.py
import pdb
for i in (1,2,3):
pdb.set_trace()
print i
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 302/338
13/11/2016 python Basic and Intermediate Level Modules
> <ipython‐input‐1‐0bad0586cb8f>(7)<module>()
‐> print i
(Pdb) n
1
> <ipython‐input‐1‐0bad0586cb8f>(5)<module>()
‐> for i in (1,2,3):
(Pdb) l
1 #!/usr/bin/python
2 # third.py
3 import pdb
4
5 ‐> for i in (1,2,3):
6 pdb.set_trace()
7 print i
[EOF]
(Pdb) n
> <ipython‐input‐1‐0bad0586cb8f>(6)<module>()
‐> pdb.set_trace()
(Pdb) l
1 #!/usr/bin/python
2 # third.py
3 import pdb
4
5 for i in (1,2,3):
6 ‐> pdb.set_trace()
7 print i
[EOF]
(Pdb) s
‐‐Call‐‐
> c:\python27\lib\pdb.py(1250)set_trace()
‐> def set_trace():
(Pdb) s
> c:\python27\lib\pdb.py(1251)set_trace()
‐> Pdb().set_trace(sys._getframe().f_back)
(Pdb) s
‐‐Call‐‐
> c:\python27\lib\pdb.py(61)__init__()
‐> def __init__(self, completekey='tab', stdin=None, stdout=None, skip=None):
(Pdb) r
‐‐Return‐‐
> c:\python27\lib\pdb.py(104)__init__()‐>None
‐> self.commands_bnum = None # The breakpoint number for which we are
(Pdb) r
‐‐Return‐‐
> c:\python27\lib\pdb.py(1251)set_trace()‐>None
‐> Pdb().set_trace(sys._getframe().f_back)
(Pdb) r
> <ipython‐input‐1‐0bad0586cb8f>(7)<module>()
‐> print i
(Pdb) c
2
> <ipython‐input‐1‐0bad0586cb8f>(6)<module>()
‐> pdb.set_trace()
(Pdb) c
3
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 303/338
13/11/2016 python Basic and Intermediate Level Modules
Similarly, in fourth.py, you can observe the functionality of for loop and if condition, in runtime.
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 304/338
13/11/2016 python Basic and Intermediate Level Modules
In [2]: #!/usr/bin/python
# fourth.py
import pdb
for i in range(1,11):
if i == 5:
pdb.set_trace()
continue
print i
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 305/338
13/11/2016 python Basic and Intermediate Level Modules
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 306/338
13/11/2016 python Basic and Intermediate Level Modules
1
2
3
4
> <ipython‐input‐2‐f1378680eab5>(8)<module>()
‐> continue
(Pdb) l
3 import pdb
4
5 for i in range(1,11):
6 if i == 5:
7 pdb.set_trace()
8 ‐> continue
9 print i
[EOF]
(Pdb) b 5,6,9
Breakpoint 1 at <ipython‐input‐2‐f1378680eab5>:5
(Pdb) l
[EOF]
(Pdb) n
> <ipython‐input‐2‐f1378680eab5>(5)<module>()
‐> for i in range(1,11):
(Pdb) l
1 #!/usr/bin/python
2 # fourth.py
3 import pdb
4
5 B‐> for i in range(1,11):
6 if i == 5:
7 pdb.set_trace()
8 continue
9 print i
[EOF]
(Pdb) d 5
*** Newest frame
(Pdb) l 1,9
1 #!/usr/bin/python
2 # fourth.py
3 import pdb
4
5 B‐> for i in range(1,11):
6 if i == 5:
7 pdb.set_trace()
8 continue
9 print i
(Pdb) c
6
> <ipython‐input‐2‐f1378680eab5>(5)<module>()
‐> for i in range(1,11):
(Pdb) c
7
> <ipython‐input‐2‐f1378680eab5>(5)<module>()
‐> for i in range(1,11):
(Pdb) c
8
> <ipython‐input‐2‐f1378680eab5>(5)<module>()
‐> for i in range(1,11):
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 307/338
13/11/2016 python Basic and Intermediate Level Modules
(Pdb) r
9
> <ipython‐input‐2‐f1378680eab5>(5)<module>()
‐> for i in range(1,11):
(Pdb) r
10
> <ipython‐input‐2‐f1378680eab5>(5)<module>()
‐> for i in range(1,11):
(Pdb) c
Now, let try to debug a script with some bugs.
Assignment : Try to find the dug, in this buggyFifth.py script.
#!/usr/bin/python
# buggyFifth.py
def eo(num):
''' fun for even odd numbers '''
if num % 2 == 0:
return 'even'
else:
return 'odd'
import pdb;pdb.set_trace()
print eo(2)
print eo(3)
print eo.func_doc
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 308/338
13/11/2016 python Basic and Intermediate Level Modules
Assignment 6: Analyze the script execution in this fifth.py
#!/usr/bin/python
# fifth.py
def eo(num):
''' fun for even odd numbers '''
if num % 2 == 0:
print 'even'
else:
print 'odd'
import pdb
pdb.set_trace()
for i in range(100):
print "The number1 is %s" %(i)
print "The number2 is %s" %(i)
print "The number3 is %s" %(i)
print "The number4 is %s" %(i)
print "The number5 is %s" %(i)
eo(i)
Assignment 7: In this sixth.py, Observe the call flow of function calls.
#!/usr/bin/python
# sixth.py
import pdb
def fourth():
second()
print "this is my fourth function \n"
def third():
print "this is my third function \n"
def second():
third()
print "this is my second function \n"
def first():
fourth()
print "this is my first function \n"
pdb.set_trace()
first()
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 309/338
13/11/2016 python Basic and Intermediate Level Modules
In conclusion, pdb debugging starts from the line where the pdb.set_trace() is placed. It can be more helpful,
in cases where using IDE or other GUI based debuggers is not possible. But, there are other debuggers such
as pydev, ... which have much more functionality than pdb.
re module
Regular expression (or regex) are used for pattern matching in the date. It is available in almost all
programming languages. Python has re module to deal with regular expressions.
In [3]: import re
In [4]: print dir(re)
['DEBUG', 'DOTALL', 'I', 'IGNORECASE', 'L', 'LOCALE', 'M', 'MULTILINE', 'S',
'Scanner', 'T', 'TEMPLATE', 'U', 'UNICODE', 'VERBOSE', 'X', '_MAXCACHE', '__
all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__
version__', '_alphanum', '_cache', '_cache_repl', '_compile', '_compile_rep
l', '_expand', '_locale', '_pattern_type', '_pickle', '_subx', 'compile', 'co
py_reg', 'error', 'escape', 'findall', 'finditer', 'match', 'purge', 'searc
h', 'split', 'sre_compile', 'sre_parse', 'sub', 'subn', 'sys', 'template']
In [5]: regObject = re.compile("python") # creating a regular expression Object, r
egObject
In [6]: print regObject, type(regObject)
<_sre.SRE_Pattern object at 0x038802E0> <type '_sre.SRE_Pattern'>
re.match()
re.match(string[, pos[, endpos]])
Matches zero or more characters at the beginning of the string
In [7]: regObject.match("python Programming is Good") # The matched result is store
d in re type object
Out[7]: <_sre.SRE_Match at 0x38edb80>
In [8]: print regObject.match("python Programming is Good")
<_sre.SRE_Match object at 0x038EDF00>
In [9]: print regObject.match("python Programming is Good").group() # returns the matc
hes stored in object
python
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 310/338
13/11/2016 python Basic and Intermediate Level Modules
In [10]: print regObject.match("Programming python is Good")
None
In [11]: print regObject.match("Programming python is Good").group()
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
AttributeError Traceback (most recent call last)
<ipython‐input‐11‐bba0226c0a4e> in <module>()
‐‐‐‐> 1 print regObject.match("Programming python is Good").group()
AttributeError: 'NoneType' object has no attribute 'group'
Until and unless there are matches found, the group() attribute will not be present.
In [12]: print regObject.match(" python Programming is Good") # white‐space in startin
g
None
In [13]: print regObject.match("Python Programming is Good") # capital 'P' encounter
ed
None
In [14]: print regObject.match('pythoN') # results in None
None
In [15]: print regObject.match('pythoN'.lower())
<_sre.SRE_Match object at 0x0396A1E0>
In [16]: #!/usr/bin/python
import os
checkString = 'python'
compiledCheckString = re.compile(checkString) # re object will be created
targetString = 'python programming'
matchs = compiledCheckString.match(targetString) # match() will be initiate
d on the re object
print matchs
if matchs:
print "Now lets print the matches word"
print matchs.group()
<_sre.SRE_Match object at 0x0396A250>
Now lets print the matches word
python
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 311/338
13/11/2016 python Basic and Intermediate Level Modules
In [17]: #!/usr/bin/python
import os
checkString = 'python'
compiledCheckString = re.compile(checkString) # re object will be created
targetString = 'Python'
matchs = compiledCheckString.match(targetString) # match() will be initiate
d on the re object
print matchs
if matchs:
print "Now lets print the matches word"
print matchs.group()
else:
print "No matches found"
None
No matches found
Interview Question : What is the difference between re.search() and re.match()?
re.search()
re.search(string[, pos[, endpos]])
Matches zero or more characters anywhere in the string
In [18]: regObject = re.compile("python")
In [19]: regObject.search("python programming")
Out[19]: <_sre.SRE_Match at 0x396a250>
In [20]: regObject.match("python programming")
Out[20]: <_sre.SRE_Match at 0x396a3d8>
In [21]: regObject.search("programming python is good")
Out[21]: <_sre.SRE_Match at 0x396a448>
In [22]: print regObject.match("programming python is good") # match tries to match in
the starting only
None
In [23]: regObject.search("programming is good in python")
Out[23]: <_sre.SRE_Match at 0x396a528>
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 312/338
13/11/2016 python Basic and Intermediate Level Modules
In [24]: regObject = re.compile("python is")
print regObject.match("programming python is good")
print regObject.search("programming python is good")
None
<_sre.SRE_Match object at 0x0396A1E0>
In [25]: print regObject.search("is programming python in good ?")
None
Special Characters
^ (caret) Matches the start of the string
In [26]: string = "This is python class"
regObject = re.compile("^This")
In [27]: result = regObject.match(string)
In [28]: print result.group()
This
Doing in other way
In [29]: re.match('^This',string)
Out[29]: <_sre.SRE_Match at 0x396a800>
In [30]: re.match('^This',string).group()
Out[30]: 'This'
In [31]: re.match('^This',"This is python class").group()
Out[31]: 'This'
In [32]: re.search('^This',"This is python class").group()
Out[32]: 'This'
In [33]: print re.search('^This', "Yes!, This is python class")
None
$ matches the end of the string, or just before the newline at the end of the string
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 313/338
13/11/2016 python Basic and Intermediate Level Modules
In [34]: #!/usr/bin/python
import re
string = 'foo foobar'
print string
regObject= re.compile('foobar$')
print "regObject = ",regObject
print "regObject.match(string) ", regObject.match(string) # re.match() vs r
e.search()
print "regObject.search(string) ", regObject.search(string)
foo foobar
regObject = <_sre.SRE_Pattern object at 0x038245E0>
regObject.match(string) None
regObject.search(string) <_sre.SRE_Match object at 0x0396A8A8>
In [35]: print re.match('foobar$',string) # pattern match only in the starting of line
None
In [36]: print re.search('foobar$',string)
<_sre.SRE_Match object at 0x0396A9C0>
In [37]: print re.search('foobar$',string).group()
foobar
. (DOT)
matches any character, except the newline. if DOTALL flag is enabled, it matches any character
including newline
In [38]: #!usr/bin/python
string = 'This'
result = re.search('....', string)
if result:
print result.group()
This
In [39]: print re.search('......', "Shoban").group()
Shoban
In [40]: print re.search('....', "Shoban").group()
Shob
In [41]: print re.search('', "Shoban").group()
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 314/338
13/11/2016 python Basic and Intermediate Level Modules
In [42]: print re.search('....$', "Shoban").group()
oban
In [43]: print re.search('^....', "Shoban").group()
Shob
In [44]: print re.search('^....$', "Shoban").group()
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
AttributeError Traceback (most recent call last)
<ipython‐input‐44‐42e3a946b9a3> in <module>()
‐‐‐‐> 1 print re.search('^....$', "Shoban").group()
AttributeError: 'NoneType' object has no attribute 'group'
In [45]: print re.search('^......$', "Shoban").group()
Shoban
* causes the RE to match 0 or more repetitions of the preceeding RE.
ex: 'ab*' ‐ matches for 'a', 'ab', and 'a' followed by any number of 'b''s
ab, abb, abbbb ...
In [46]: print string
This
In [47]: re.search('.*',string).group()
Out[47]: 'This'
In [48]: re.search('.*', "I am aspiring to be a promising Engineer").group()
Out[48]: 'I am aspiring to be a promising Engineer'
In [49]: re.search('.a*', "I am aspiring to be a promising Engineer").group()
Out[49]: 'I'
In [50]: re.search('a*', "I am aspiring to be a promising Engineer").group()
Out[50]: ''
In [51]: re.search('. *', "I am aspiring to be a promising Engineer").group()
Out[51]: 'I '
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 315/338
13/11/2016 python Basic and Intermediate Level Modules
In [52]: re.search('.g*', "I am aspiring to be a promising Engineer").group() #'g' is
occuring 0 times
Out[52]: 'I'
In [55]: re.search('.*', '').group() # trying to find in null string # resulted in
white‐space, not NONE
Out[55]: ''
In [56]: re.search('', '').group() # trying to find in null string # resulted in
white‐space, not NONE
Out[56]: ''
causes the RE to match 1 or more repetitions of the preceeding RE
ex: ab+ > 'ab', 'abb', 'abbb', ...
In [57]: string = 'abbba'
re.match('ab+a',string).group()
Out[57]: 'abbba'
In [58]: print re.match('ab+a','aa')
None
In [59]: print re.match('ab*a','aa123').group() # * tries to find 0 or more occurre
nces of 'b'
aa
In [60]: print re.match('ab*c','aa123').group()
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
AttributeError Traceback (most recent call last)
<ipython‐input‐60‐b324747346bc> in <module>()
‐‐‐‐> 1 print re.match('ab*c','aa123').group()
AttributeError: 'NoneType' object has no attribute 'group'
In [61]: print re.match('ab*c','aca123').group()
ac
In [62]: print re.match('ab*.*','aca123').group()
aca123
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 316/338
13/11/2016 python Basic and Intermediate Level Modules
In [63]: re.search('ab+a','abbba').group()
Out[63]: 'abbba'
In [64]: print re.search('ab+a','aa')
None
? causes the RE to match 0 or 1 time of the preceeding RE
ex: ab? > 'a', 'ab'
In [65]: string = 'hello'
In [66]: print re.match(r'hello?', string).group()
hello
In [67]: print re.match(r'hello?', 'hell').group()
hell
In [68]: print re.match(r'hello?', 'hel')
None
In [69]: print re.match(r'hell?o?', 'hel').group()
hel
In [70]: print re.match('hell?o', 'helll') # 'l' is repeating 3 times
None
In [71]: print re.match('hell?o', 'helllo') # 'l' is repeating 3 times
None
In [72]: print re.match('hell?o', 'helo').group()
helo
* ‐ 0 or more
+ ‐ 1 or more
? ‐ 0 or 1
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 317/338
13/11/2016 python Basic and Intermediate Level Modules
Gready Search Patterns
*?, +?, ?? GREEDY SEARCH Patterns
In [73]: string = '<H1>title</H1>'
In [74]: print re.match(r'<.*>', string).group()
<H1>title</H1>
In [75]: print re.match(r'<H*?>', string).group()
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
AttributeError Traceback (most recent call last)
<ipython‐input‐75‐ad2e5d60ff7e> in <module>()
‐‐‐‐> 1 print re.match(r'<H*?>', string).group()
AttributeError: 'NoneType' object has no attribute 'group'
In [76]: print re.match(r'<H1*?>', string).group()
<H1>
In [77]: print re.match(r'<.*?>', string).group()
<H1>
{m}
specifies the exactly m copies of previous RE
ex: a{6} it maches six 'a' characters
In [78]: string = 'aaashique'
In [79]: re.match('a{3}shique', string).group()
Out[79]: 'aaashique'
In [80]: re.match('a{3}shique', 'aashique')
In [81]: print re.match('aa{2}shique', 'aaashique').group()
aaashique
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 318/338
13/11/2016 python Basic and Intermediate Level Modules
In [82]: re.match('a{3}shique', 'aaaaaashique').group()
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
AttributeError Traceback (most recent call last)
<ipython‐input‐82‐9d05772446f1> in <module>()
‐‐‐‐> 1 re.match('a{3}shique', 'aaaaaashique').group()
AttributeError: 'NoneType' object has no attribute 'group'
In [83]: re.match('aaaa{3}shique', 'aaaaaashique').group()
Out[83]: 'aaaaaashique'
{m,n}
causes the resulting RE to match from m to n repititions of the preceding RE
ex: a{3,5} will match from 3 to 5 'a' characters
In [84]: string = 'aaashique'
In [85]: print re.match('a{2,3}shique', string).group()
aaashique
In [86]: print re.match('a{2,3}shique', 'aashique').group()
aashique
In [87]: print re.match('aa{2,3}shique', 'aaaashique').group()
aaaashique
{m,n}? combined regex pattern
In [88]: print re.match('a{1,2}?shique', 'aashique').group()
aashique
In [89]: re.match('a{2,3}','aaaaaa').group()
Out[89]: 'aaa'
In [90]: re.search('a{2,3}',string).group()
Out[90]: 'aaa'
In [91]: re.search('a{2,3}?',string).group() # takes 2 occurrences, due to the presen
ce of '?'
Out[91]: 'aa'
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 319/338
13/11/2016 python Basic and Intermediate Level Modules
\ either escapes the special characters (permittin you to match characters like '*', '?') or used to signal a
special sequence
In [92]: string = '<H*>test<H*>'
In [93]: re.match('<H*>',string).group()
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
AttributeError Traceback (most recent call last)
<ipython‐input‐93‐b5f7ee7a2e36> in <module>()
‐‐‐‐> 1 re.match('<H*>',string).group()
AttributeError: 'NoneType' object has no attribute 'group'
In [94]: re.match('<H\*>',string).group()
Out[94]: '<H*>'
In [95]: string = '<H?>test<H?>'
In [96]: re.match('<H\?>',string).group()
Out[96]: '<H?>'
[ ]
used to indicate a set of characters.
regular expression characters will lose their significance, within the [] (square) braces
ex:
[mnk] ‐ will match the characters 'm', 'n' and 'k'
[a‐z] ‐ will match all characters from 'a' to 'z'
[A‐Z] ‐ will match all characters from 'A' to 'Z'
[0‐9] ‐ will match all characters from 0 to 9
[a‐m] ‐ will match all characters from 'a' to 'm'
In [97]: print re.match('h[eE]llo','hello').group()
hello
In [98]: print re.match('h[eE]llo','hEllo').group()
hEllo
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 320/338
13/11/2016 python Basic and Intermediate Level Modules
In [99]: print re.match('h[eE]llo','heEllo')
None
In [100]: print re.match('h[eE]llo','heello')
None
In [101]: print re.match('h[eE]*llo','heello').group()
heello
In [102]: re.match('[a‐z].*','hello').group()
Out[102]: 'hello'
In [103]: re.match('[a‐z].*','hello123').group()
Out[103]: 'hello123'
In [104]: re.match('[a‐z]','hello123').group()
Out[104]: 'h'
In [105]: print re.search('[a‐z]$','hello123')
None
In [106]: re.search('[0‐9]$','hello123').group()
Out[106]: '3'
Note special characters lose their special meaning inside sets.
To match a literal ']' inside a set, precede it with a backslash, or place it at the beginning of the set. For
example, both [()[]{}] and [] () {[]} will match a parenthesis
In [107]: string = '<h*>test<h*>'
In [108]: re.match('<h[*]>',string).group() # esacaping *
Out[108]: '<h*>'
In [109]: re.match('<h\*>',string).group() # esacaping *
Out[109]: '<h*>'
Interview Question : Write a regular expression, to match all email IDs?
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 321/338
13/11/2016 python Basic and Intermediate Level Modules
Assignment : Identify the email IDs in the resume in the following paragraph.
Welcome to RegExr v2.1 by gskinner.com, proudly hosted by Media Temple!
Edit the Expression & Text to see matches. Roll over matches or the expression for
details. Undo mistakes with ctrl‐z. Save Favorites & Share expressions with friend
s or the Community. Explore your results with Tools. A full Reference & Help is ava
ilable in the Library, or watch the video Tutorial.
python@programm.com
Sample text for testing:
abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789 _+‐.,!@#$%^&*();\/|<>"'python@gmail.com
12345 ‐98.7 3.141 .6180 9,000 +42
555.123.4567 +1‐(800)‐555‐2468
foo@demo.net bar.ba@test.co.uk
www.demo.com http://foo.co.uk/
http://regexr.com/foo.html?q=bar
https://mediatemple.net
mediatepmple@outlook.com
mubeen.tom@hacker.com
1%453&harini_new@in.com
Popular Regular expression Generators :
http://regexr.com/ (http://regexr.com/)
https://regex101.com/#python (https://regex101.com/#python)
http://www.regularexpressions.info/python.html (http://www.regular
expressions.info/python.html)
Popular Regular Expression Visualizers :
https://regexper.com (https://regexper.com)
re.IGNORECASE
to ignore the case (upper and lower)
In [110]: regObject = re.compile('python', re.IGNORECASE) #compiling of regex object le
ts us to reuse it
result = regObject.search('PYTHON')
print result
if result:
print result.group()
<_sre.SRE_Match object at 0x0396DD40>
PYTHON
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 322/338
13/11/2016 python Basic and Intermediate Level Modules
In [111]: reg = re.compile('python', re.I) # Both re.I and re.IGNORECASE work in same
way
result = reg.search('PyThOn')
print result
if result:
print result.group()
<_sre.SRE_Match object at 0x0396DC28>
PyThOn
In [112]: print re.search('python', 'PyThOn', re.I).group() # Alternative method
PyThOn
re.DOTALL
special character match any character at all, includinh a newline
In [113]: string = 'Today is Friday.\n Tomarrow is morning'
print string
Today is Friday.
Tomarrow is morning
In [114]: reg = re.compile('.*')
print reg.search(string).group() # Observe that only first line is matche
d
Today is Friday.
In [115]: reg = re.compile('.*', re.DOTALL)
print reg.search(string).group() # Now, all the lines will be matched
Today is Friday.
Tomarrow is morning
In [116]: print re.search('.*', string, re.DOTALL).group() # ALTERNATIVELY
Today is Friday.
Tomarrow is morning
Grouping
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 323/338
13/11/2016 python Basic and Intermediate Level Modules
\w ‐ presence of Alphabet
\W ‐ absence of Alphabet
\d ‐ presence of digit
\D ‐ absence of digit
\s ‐ presence of White‐space
\S ‐ absence of white‐space
In [117]: print re.search('\w', 'udhay prakash').group()
u
In [118]: print re.search('\w*', 'udhay prakash').group()
udhay
In [119]: print re.search('(\w)', 'udhay prakash').group()
u
In [120]: print re.search('(\w*)', 'udhay prakash').group()
udhay
In [121]: print re.search('(\w*)', 'udhay prakash').group(0)
udhay
In [122]: print re.search('(\w*) (\w*)', 'udhay prakash').group()
udhay prakash
In [123]: print re.search('(\w*) (\w*)', 'udhay prakash').group(0) # group(0) is same a
s group()
udhay prakash
In [124]: print re.search('(\w*) (\w*)', 'udhay prakash').group(1)
udhay
In [125]: print re.search('(\w*) (\w*)', 'udhay prakash').group(2)
prakash
In [126]: print re.search('(\w*)(\W)(\w*)', 'udhay prakash').group()
udhay prakash
In [127]: print re.search('(\w*)(\W)(\w*)', 'udhay prakash').group(3)
prakash
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 324/338
13/11/2016 python Basic and Intermediate Level Modules
In [128]: print re.search('(\w*)(\s)(\w*)', 'udhay prakash').group()
udhay prakash
Perl based grouping pattern
(?P<name>)
In [129]: m = re.match(r"(?P<first_name>\w+) (?P<last_name>\w+)", "Barack Obama" )
In [130]: m.group()
Out[130]: 'Barack Obama'
In [131]: m.group(0)
Out[131]: 'Barack Obama'
In [132]: m.group(2)
Out[132]: 'Obama'
In [133]: m.group('first_name')
Out[133]: 'Barack'
In [134]: m.group('last_name')
Out[134]: 'Obama'
In [135]: first_name # Observe that those identifiers can't be used outside
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
NameError Traceback (most recent call last)
<ipython‐input‐135‐c57da601b80c> in <module>()
‐‐‐‐> 1 first_name
NameError: name 'first_name' is not defined
In [136]: re.match(r'(..)+', 'alb2cs').group()
Out[136]: 'alb2cs'
NOTE: If a group matches multiple times, only the last match is accessible
In [137]: re.match(r'(..)+', 'alb2cs').group(0)
Out[137]: 'alb2cs'
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 325/338
13/11/2016 python Basic and Intermediate Level Modules
In [138]: re.match(r'(..)+', 'alb2cs').group(1)
Out[138]: 'cs'
In [139]: re.match(r'(..)+', 'alb2cs').group(2)
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
IndexError Traceback (most recent call last)
<ipython‐input‐139‐78100e216102> in <module>()
‐‐‐‐> 1 re.match(r'(..)+', 'alb2cs').group(2)
IndexError: no such group
Assignment : Try replacing match with search in the below expression, and reevaluate
re.match(r'(..)+', 'alb2cs').group(1)
ktg cl19
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 326/338
13/11/2016 python Basic and Intermediate Level Modules
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 327/338
13/11/2016 python Basic and Intermediate Level Modules
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 328/338
13/11/2016 python Basic and Intermediate Level Modules
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 329/338
13/11/2016 python Basic and Intermediate Level Modules
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 330/338
13/11/2016 python Basic and Intermediate Level Modules
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 331/338
13/11/2016 python Basic and Intermediate Level Modules
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 332/338
13/11/2016 python Basic and Intermediate Level Modules
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 333/338
13/11/2016 python Basic and Intermediate Level Modules
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 334/338
13/11/2016 python Basic and Intermediate Level Modules
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 335/338
13/11/2016 python Basic and Intermediate Level Modules
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 336/338
13/11/2016 python Basic and Intermediate Level Modules
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 337/338
13/11/2016 python Basic and Intermediate Level Modules
file:///C:/Users/HOME/Google%20Drive/python/tut/complete%20Material/python++Basic+and+Intermediate+Level+Modules.html 338/338