One problem is you don't use the values returned by mul_2nums(). The values returned by mul_2nums() are also the wrong type for multiplication.
You could do this.
def mul_2nums():
x = input('write first number: ')
y = input('write second number: ')
return x, y
def multiply(x, y):
result = x * y
if result < 0:
print(0)
else:
print(result)
x, y = mul_2nums()
multiply(x,y)
There's likely to be some confusion caused by programming using Python2 instead of Python3. In Python2, input() evaluates the entered string and returns the result. To get the string entred by the user you would use raw_input(). In python3, input() does what raw_input() did in python2, and nothing does what input() used to do in python2. Everyone decided automatically evaluating input strings was a really bad idea.
Another problem is that you never return the result of the multiplication. Printing is not returning. When a function returns a value, the value can be used to perform additional calculations. When a function prints a value instead of returning, the result is lost. Not only that, a function that prints is not easily reused. I might want to format my output differently than the way it is done in the function.
This is how I might write your code, using python3.
def input_int(prompt="Enter an integer: "):
while True:
try:
text = input(prompt)
return int(text)
except ValueError:
print(f"{text} is not an integer.")
def multiply(x, y):
return max(0, x * y)
x = input_int()
y = input_int()
result = multiply(x, y)
print(f"{x} * {y} = {result}")
I would write a special function for getting the integer input. Entering integers is error prone. Care must be taken that the user provides an invalid input that crashes the program. In input_int() I use try/except to catch invalid input and ask the user to try again.
returning 0 for negative results in multiply() can be done with an if statment, but it can also be done using max(*args). Max returns the maximum value *args. max(0, result) returns result or 0, whichever is greater.