Sep 26-28, 2018 Vikrant Patil
These notes are available online at http://notes.pipal.in/2018/vmware-practical-master-sep/
© Pipal Academy LLP
We will be using anaconda (python 3) distribution for this training. it can be downloaded from
2 + 3
1 + 2
2**2
3/4
5//2
2**10000
4.5
s = "There are powerful string functionalities"
s
s = 'single quote'
d = "double quote"
s
d
multiline = """
this is
multi line
string
"""
l = [1,2,3,4]
l[0]
l[3]
l[-1]
s
s[0]
s[-1]
nums = [1,2,3,4,5,6,7,8,9]
nums[0:2]
nums = [2,4,6,8,10,12,14,16]
nums[3:6] # start at index 3 end at index 5
s[2:5]
nums[:2]
nums[5:]
nums[2:4:2]
n = list(range(3, 30, 3))
n
n[3:8:2]
copyofn = n[:]
copyofn
n[::-1]
word = "madam"
word == word[::-1]
def is_palindrom(w):
return w == w[::-1]
is_palindrom("madam")
is_palindrom("hello")
"Carefull , {0} can be {1} to health".format("breathing", "injurious")
"Carefull , {arg1} can be {arg2} to health".format(arg1="breathing", arg2="injurious")
problems
d = {"name":"vmware","city":"bangalore"}
d
d["name"]
d["address"] = "J P Nagar"
d
import json
json.dumps(d)
d
l = [0,0,0,0]
l.append(0)
l
True
False
bool_ = {True:1,False:0}
bool_[True]
for number in nums:
print(number**2)
for c in "Some random string":
print(c, end=",")
for item in d:
print(item, d[item])
[ n*n for n in nums]
squares = []
for n in nums:
squares.append(n*n)
print(squares)
squares = []
for n in nums:
squares.append(n*n)
print(squares)
digits = list(range(10))
digits
[digit*digit for digit in digits if digit%2==0]
def even(x):
return x%2==0
def odd(x):
return not even(x)
[n**n for n in digits if even(n)]
x = 2 if digits[0]==0 else 1
x
data = [[i+j for i in range(5)] for j in range(5)]
data
data[0]
data[-1]
matrix = [[i for i in range(5)] for j in range(5)]
matrix
matrix[0]
matrix[0][0]
matrix[1][0]
matrix[2][0]
col0 = []
for row in matrix:
col0.append(row[0])
col0
def column(data, col):
return [row[col] for row in data]
column(matrix, 0)
column(matrix, 1)
problem
setence = "Just follow the yellow brick road"
setence.split()
[ word[::-1] for word in setence.split()]
[column(matrix,i) for i in range(len(matrix[0]))]
def transpose(data):
colcount = len(data[0])
return [column(data, i) for i in range(colcount)]
transpose(matrix)
def quick(data):
if not data:
return []
p = data[0]
less = [i for i in data[1:] if i<p]
more = [i for i in data[1:] if i>=p]
return quick(less) + [p] + quick(more)
quick([8, 3, 1, 1, 4, 5, 4, 5, 8])
%%file data.csv
A1,A2,A3,A4
B1,B2,B3,B4
C1,C2,C3,C4
D1,D2,D3,D4
data = []
with open("data.csv") as f:
for line in f:
row = line.strip().split(",")
data.append(row)
data
def csvparser(filename):
data = []
with open("data.csv") as f:
for line in f:
row = line.strip().split(",")
data.append(row)
return data
csvparser("data.csv")
def csvparser_(filename):
with open("data.csv") as f:
return [line.strip().split(",") for line in f]
csvparser_("data.csv")
open("data.csv").read()
with open("data.csv") as f:
for line in f:
print(line)
with open("data.csv") as f:
for line in f:
print(line.strip())
!ls
!cat data.csv
def f():
pass
print(f)
x = 3
y = x
y
aliasf = f
print(aliasf)
def hello():
print(hello)
def append(x):
x.append(0)
l = []
append(l)
l
def fun1(x):
x = [1,2,3]
l
fun1(l)
l
def fun2(x):
print("Before", id(x))
x = [1,2,3]
print("After", id(x))
return x
print(id(l))
l = fun2(l)
print(id(l))
import gc, sys
sys.getrefcount(l)
del l
[id(item) for item in gc.get_referrers(l)]
def addition(f, items):
return sum([f(item) for item in items])
def square(x):
return x*x
addition(square, range(10))
def identity(x):
return x
addition(identity, range(10))
def cube(x):
return x**3
addition(cube, range(10))
max([3,4,5,61,4])
words = setence.split()
words
max(words)
numbers = ["one", "two","three","four","five"]
max(numbers) # by dictionary order
max(numbers, key=len)
records = [
("A1",0.3,90),
("A2",0.5,80),
("A3",0.1,95),
("A4",0.35,85),
("A5",0.34,82)
]
min(records)
max(records)
for record in records:
print(record)
def column0(r):
return r[0]
def column1(r):
return r[1]
def column2(r):
return r[2]
max(records, key=column1)
max(records, key=column2)
def make_adder(x):
def adder(y):
return x+y
return adder
adder5 = make_adder(5)
adder5
adder5(6)
adder5(4)
adder5(3)
def make_log_helper(level):
def log(msg):
print(level.upper(),":",msg)
return log
info = make_log_helper("info")
error = make_log_helper("error")
warning = make_log_helper("warning")
info("This is just for your information")
error("Err, humans always make mistake!")
warning("Be carefull, you live in city!")
level = "info"
info_ = make_log_helper(level)
del level
info_("Just another info")
def volume_cylinder(radius=1.0, height=1.0):
return 3.14*radius**2*height
volume_cylinder() # radius = 1, height = 1
volume_cylinder(1)
volume_cylinder(1,2)
volume_cylinder(height=1,radius=2)
add = lambda x,y: x+y
add(2,3)
def make_adder(x):
return lambda y: x+y
adder7 = make_adder(7)
adder7(5)
def column(c):
return lambda record:record[c]
max(records, key=column(0))
max(records, key=column(1))
max(records, key=column(1))
records
max([1,2,3,4], key=column(0))
def add(x,y):
return x+y
def debug(f):
def wrapper(*args):
print("Begin ", f.__name__)
r = f(*args)
print("End ", f.__name__)
return r
return wrapper
add1 = debug(add)
add(2,3)
add1(2,3)
add = debug(add)
add(2,3)
@debug
def square(x):
return x
problem
depricated which when applied to a function shows depricated warningfrom functools import partial
import math
math.pi
math.sqrt(2)
%%file bank0.py
balance = 0
def get_balance():
return balance
def withdraw(amount):
global balance
balance -= amount
def deposite(amount):
global balance
balance += amount
import bank0 as bankaccount
bankaccount.get_balance()
bankaccount.deposite(100)
bankaccount.get_balance()
import bank0 as bankaccount1
bankaccount1.get_balance()
%%file bank1.py
def make_account():
return {"balance":0}
def get_balance(account):
return account['balance']
def withdraw(account,amount):
account['balance'] -= amount
def deposite(account, amount):
account['balance'] += amount
import bank1 as bank
a1 = bank.make_account()
bank.get_balance(a1)
bank.deposite(a1, 200)
bank.get_balance(a1)
class BankAccount:
def __init__(self):
self.balance = 0
def get_balance(self):
return self.balance
def withdraw(self, amount):
self.balance -= amount
def deposit(self, amount):
self.balance += amount
a = BankAccount()
type(a)
type(BankAccount)
class Foo:
def foo1():
print("foo1")
@staticmethod
def foo2():
print("foo2")
Foo.foo1()
Foo.foo2()
f = Foo()
f.foo2()
f.foo1()
a.get_balance()
a.deposit(300)
a.get_balance()
type(Foo.foo1)
type(Foo.foo2)
type(a.get_balance)
type(BankAccount.get_balance)
class Point:
x,y = 0,0
def __init__(self, color):
self.color = color
def getcolor(self):
return self.color
Point.x
Point.y
Point.__init__
Point.getcolor
p = Point("red")
p.x
p.y
p.color
Point.color
Point.x
p.x
p1 = Point("yellow")
p1.x
Point.x = 10
p.x
p1.x
p.x = 20
Point.x
p.x
p1.x
p.__dict__
p1.__dict__
Point.__dict__
p.z = 10
p.__dict__
p1.__dict__
Point.__dict__
del p.x
p.__dict__
p.x
l = [1,2,2]
l
p
class Pair:
def __init__(self, x, y):
self.x = x
self.y = y
p = Pair(1,2)
p
class Pair:
def __init__(self, x, y):
self.x = x
self.y = y
def __repr__(self):
return "Pair({0.x!r},{0.y!r})".format(self)
def __str__(self):
return "<{0.x!s} {0.y!s}>".format(self)
def __add__(self, p):
return Pair(self.x+p.x, self.y+p.y)
def __getitem__(self, name):
if name == "x":
return self.x
elif name == "y":
return self.y
else:
raise AttributeError("No such attribute, " + name)
Pair(1,2)
print(Pair(1,2))
a
print(a)
"hello " + "World!"
s = "hello"
s *2
2 *s
p1 = Pair(1,2)
p2 = Pair(3,4)
p1 + p2
p1['x']
class Foo:
def __setattr__(self, name, value):
raise Exception("No way!")
f = Foo()
f.x = 10
Foo.x = 10
f = Foo()
f.x
class Special:
__slots__ =['x','y']
def __init__(self, x, y):
self.x = x
self.y = y
s = Special(1,2)
s.z = 10