
def B():
	print("Inside the method B.")
	
def A():
	print("Inside the method A.")
	return B

returned_function = A()
print("Addr of B = ", B)
print("returned_function = ", returned_function) # Same addr as B

print("----------------------------------------------")




print("----------------------------------------------")

def safe_f(f):

    def new_f(x):
        try:
            return f(x) 
        except:
            return None

    return new_f

def f1(x):
    return(1/x)

def f2(x):
    return(2/x)

safe_f1 = safe_f(f1)
print(safe_f1)
safe_f2 = safe_f(f2)
print(safe_f2)        # It returns a DIFFERENT address !!!

x = 0
print( safe_f1(x) )
print( safe_f2(x) )


