Below are 3 modules,
point.py segment.py rectangle.py,
where rectangle.py module imports a function object from segment.py module as mentioned,
from segment import get_size.
# point.py
# Representation - start
from operator import sub, mul
from math import sqrt
#Constructor
def make_point(x, y):
return (x, y)
#Selector
def x_coordinate(point):
return point[0]
#Selector
def y_coordinate(point):
return point[1]
#Selector
def distance_between_points(p1, p2):
return sqrt(square(sub(p1[0],p2[0])) + square(sub(p1[1],p2[1])))
#helper for selector
def square(a):
return mul(a, a)
#Representation - end
#Use - start
def get_x_coordinate(point):
return x_coordinate(point)
def get_y_coordinate(point):
return y_coordinate(point)
#Use - end
# segment.py
# Representation - start
from point import distance_between_points, make_point, get_x_coordinate, get_y_coordinate
#Constructor
def make_segment(point1, point2):
return (point1, point2)
#Selector
def start_segment(lineSegment):
return lineSegment[0]
#Selector
def end_segment(lineSegment):
return lineSegment[1]
#Representation - end
#Use -start
def midpoint_segment(lineSegment):
return make_point((get_x_coordinate(start_segment(lineSegment)) + get_x_coordinate(end_segment(lineSegment)))/2, (get_y_coordinate(start_segment(lineSegment)) + get_y_coordinate(end_segment(lineSegment)))/2)
def get_size(lineSegment):
return distance_between_points(start_segment(lineSegment), end_segment(lineSegment))
#Use - end
#Driver code from user
p1 = make_point(1,2)
p2 = make_point(3, 4)
line = make_segment(p1, p2)
midpoint = midpoint_segment(line)
print(midpoint)
# rectangle.py
# Representation - start
from point import make_point, get_x_coordinate, get_y_coordinate
from segment import get_size
from operator import sub, abs
#Constructor
def make_rectangle(p1, p2, p3, p4):
if are_opposite_sides_equal(p1, p2, p3, p4):
return (p1, p2, p3, p4)
#Helper for constructor
def are_opposite_sides_equal(p1, p2, p3, p4):
if (abs(sub(get_x_coordinate(p1), get_x_coordinate(p2))) == abs(sub(get_x_coordinate(p3), get_x_coordinate(p4)))) and (abs(sub(get_y_coordinate(p2), get_y_coordinate(p3))) == abs(sub(get_y_coordinate(p1), get_y_coordinate(p4)))):
return True
else:
return False
#Selector
def get_length_side_segment(quadruple):
return (quadruple[0], quadruple[1])
#Selector
def get_breadth_side_segment(quadruple):
return (quadruple[1], quadruple[2])
#Representation - end
#Use -start
def perimeter(rectangle):
segment1 = get_length_side_segment(rectangle)
segment2 = get_breadth_side_segment(rectangle)
length = get_size(segment1)
breadth = get_size(segment2)
return 2 * (length + breadth)
def area(rectangle):
segment1 = get_length_side_segment(rectangle)
segment2 = get_breadth_side_segment(rectangle)
length = get_size(segment1)
breadth = get_size(segment2)
return (length * breadth)
#Use - end
#Driver code from user
p1 = make_point(1, 1)
p2 = make_point(3, 1)
p3 = make_point(3, 3)
p4 = make_point(1, 3)
rectangle = make_rectangle(p1, p2, p3, p4)
peri = perimeter(rectangle)
area_value = area(rectangle)
print(peri)
print(area_value)
My question:
As per the debugging of rectangle.py,
line from segment import get_size makes the driver code of segment.py execute and give the output (2.0, 3.0).
I am using this statement to get access to get_size. I would like to understand, How an import of function object would give this output?
from segment import get_sizeAm I importing just a functionget_sizeof modulesegmentor the complete modulesegment? Because I do not have access to other functions of modulesegmentin modulerectangleif __name__ == "__main__":