Functions are named block of code that can be used anywhere any number of times in the program. It allow us to re-use the code instead of writing the code again and again.

To define a function, we write:

Syntax:

```def function_name:
statement_1
statement_2```

Here is an example:

```def say_hello():
print("Hello")```

Now, to call this function, we can simply write:

`say_hello()`

Here are some examples on functions:

Example 1

Creating a simple function.

```def say_hello():
print("Hello")

say_hello()```

Example 2

Passing value to function.

```def square(x):
print("Square of %d is %d" % (x, x*x))

square(5)```

Example 3

Returning value from function.

```def find_big(x,y):
return x if x>y else y

big = find_big(7,5)

print("The bigger number is " , big)```

Example 4

Loop inside function.

```def factorial(x):
fact = 1

for i in range(1,x+1):
fact *= i

return fact

x = 5

print("Factorial of %d is %d" % (x, factorial(x)))```

Example 5

Passing a function into another function call.

```def square(x):
return x*x

def find_big(x,y):
return x if x>y else y

a,b = 7,5

print("The square of bigger number between %d and %d is %d" % (a,b,square(find_big(a,b))))```

Example 6

Recursive function.

```def factorial(x):
if x>1:
return x * factorial(x-1)
else:
return 1

x = 5
print("Factorial of %d is %d" % (x, factorial(x)))```

Example 7

Returning multiple values from function.

```def numbers():
return (4,5)

x,y = numbers()

print("Sum of %d and %d is %d" % (x,y, x+y))```