# hello_world.py
print("Hello, World!")
python hello_world.py
# typing.py
y = "hello"
y = 3
z = 4
print(y + z)
python typing.py
Python uses dynamic and latent typing
Type Checking: The process of determining a variable's type
Dynamic typing: type checking is performed at run-time
Static typing: type checking is performed at compile-time
Manifest (explicit) typing: explicitly telling the compiler the type of new variables
Types are associated with variables
Latent (implicit) typing: not needing to give a type to a variable
Types are associated with values
# scoping-1.py
a = 5
b = 20
def h(c):
d = True
e = 0
while d:
if c < b - c:
c = c + 1
e = e + 1
else:
d = False
return e
f = input("Enter a number: ")
print(h(int(f)) + a)
# scoping-2.py
a = 5
def b():
print(a)
b()
But consider:
# scoping-3.py
a = 5
def b():
a = a + 1
print(a)
b()
# scoping-3.py
a = 5
def b():
a = a + 1
print(a)
b()
Enter the 'global' keyword
# scoping-3.py
a = 5
def b():
global a
a = a + 1
print(a)
b()
Python support Object Oriented Programming (OOP)
a = "hello"
type(a) # class str
a.upper() # "HELLO"
a.islower() # True
Objects have methods
Python has an equivalent to Java's Null
print(None)
Reminders about Object Oriented Programming
Values are references to Objects
Objects are instances of Classes
Classes inherit from each other
class Square:
def __init__(self,size):
self.size = size
def area(self):
s = self.size
return s * s
s = Square(5)
print(s.area())
class Square:
def __init__(self,size):
self.size = size
def area(self):
s = self.size
return s * s
s = Square(5)
print(s.area())
public class Square{
private int size;
public Square(size){
this.size = size;
}
public int area(){
int s = size;
return s * s;
}
}
public static void main(String[] args){
Square s = new Square(5);
System.out.println(s.area);
}
Things to Note
Instance variables are public
__init__ is the constructor
methods typically need self parameter
Indentation matters!
type(1) #int
type(2+3) #int
type(1.0) #float
type(1.5*2) #float
type(int(1.5)) #int
"hellos"
len("hello") #5
#structural equality
"hello" == "hello" #True
# can concatonate variables
name = "cliff"
print("My name is " + name)
# cannot concatonante non strings
print("I am older than " + 18) #fail
# but can repeat strings
print("na"*15 + " BATMAN!")
# bracket syntax
lst = [1,2,3,4]
lst = []
lst = list()
# can be heterogenous
lst = [1,"hello",3.0]
# bracket indexing
lst = [1,2,3,4]
print(lst[1])
print(lst[-1])
# no bounds checking
arr = [1,2,3,4]
arr[3] = 3
arr[5] = 6 #fail
# multidimensional
a = []
a.append([])
print(a)
a[][] # error
a = [[]]*5
a = [[None] *3] * 3
# has operations
a = [1,2,3,4]
b = [4,5,6,7]
print(a+b)
# stack behaviour
a = [1,2,3]
a.append(4)
a.pop
# Curly Brace syntax
d = {}
d = {"key":"value",}
# bracket indexing
print(d["key"])
d["key2"] = "value2"
# multidimensional
d = {}
d[0] = {}
d[0][0] = 1
print(d)
True or False
#syntax
if False:
print("not here")
elif None:
print("nor here")
else:
print("Here I am")
# while loop
count = 0
while (count < 5):
print(count)
count += 1
# for loop
# must go through an iterator
a = [1,2,3]
for value in a
print(value)