# Functions in Python

User defined functions ( UDF)
Defining a function
``````def my_fun():
print("Welcome")
my_fun()  # Calling the function``````
We must call the function to use it. In above cade there is no return value and there is no parameter passed as input to the function.

## Passing parameter to function

We will pass one integer to the function and display the sum by adding 10 to it.
``````def my_fun(n): # function starts here
print(n+10)
# function ends here
my_fun(5)``````
Output
``15``

Python functions declaring and passing parameters with return value and calling the function

Note that we have maintained left indentation within the function.
We will pass more than one parameter to the function
``````def my_fun(n1,n2):
return n1+n2
print(my_fun(12,15)) # 27``````
Using string
``````def my_welcome(abc):
print("Welcome ", abc)
my_welcome("Alex") # Welcome Alex``````

## Returning data from function

``````def my_sum(a, b):
sum=a+b
return sum

print("Sum = ",my_sum(5,8))``````
Output
``Sum = 13``

## Passing list to function

We will pass a list to function and return the sum of all the elements
``````def my_sum(my_list):
sum=0
for i in my_list:
sum=sum+i
return sum

my_list=[1,5,7,12]
print("Sum = ",my_sum(my_list))``````
Output is here
``Sum = 25``

## Returning a list from a function

``````def my_details(my_marks):
total=sum(my_marks)
avg=total/len(my_marks)
a=[total,avg,len(my_marks)]
return a

my_marks=[4,3,2,11]
marks_final=my_details(my_marks)
print("Details = {}".format(marks_final))``````
Output is here
``Details = [20, 5.0, 4]``

## Passing string parameter to function

``````def my_string(str1,str2):
str3=str1 + str2
return str3
str_final=my_string('Welcome to',' Python')
print("Here is your final string : ",str_final)``````
Output is here
``Here is your final string :  Welcome to Python``

## Default Arguments of function

We will not use any parameter so python will use its default value.
``````def my_details(my_language='Python'):
print("Welcome to {}".format(my_language))

my_details()       # No parameter is passed
my_details('PHP')  # One string is passed ``````
Output is here
``````Welcome to Python
Welcome to PHP``````
In above code we have called the function without any parameter in first line. In second line we have called the function with a parameter.

If any argument does not have a default value then we must supply that while calling the function. We can have any number of arguments with default value, but once we have default value then all arguments to the right of it must have default value.

This code will generate error. non-default argument follows default argument
``````def my_details(my_language='Python',my_database):
print("Welcome to {} with {}".format(my_language,my_database))

my_details('PHP','MySQL')``````
We can change this code
``````def my_details(my_database,my_language='Python'):
print("Welcome to {} with {}".format(my_language,my_database))

my_details('PHP','MySQL')``````
Output is here
``Welcome to MySQL with PHP``

## Function returning more than 1 parameters

Python functions can return multiple values.
``````def my_fun(n1,n2):
return n1+n2,n1-n2

result1,result2=my_fun(12,15)

print("Sum = ", result1)
print("Subtraction  = ", result2)``````
Output
``````Sum =  27
Subtraction  =  -3``````
Using string
``````def my_welcome(abc1,abc2):
print("Welcome ", abc1 ,'to ', abc2)
my_welcome("Alex", "Python")``````
Output
``Welcome  Alex to  Python``

## *args **args

This function will generate error.
``````def my_fun(i1,i2): # can take two arguments
return i1+i2
print(my_fun(2,3,4)) # error ``````
TypeError: my_fun() takes 2 positional arguments but 3 were given
We can pass any number of arguments to the function by using *
``````def my_fun(*args): # can receive any number of arguments
sum=0
for i in args:
sum=sum+i
return sum
print(my_fun(2,3,4)) # 9 , passing 3 arguments
print(my_fun(2,2,3,4)) # 11, passing 4 arguments ``````

## ** to pass key and value pairs

We can pass both key and its value to the function by using **.
``````def my_fun(**kwargs): # key value pair as input
print(kwargs['c']) # plus2net
for key, value in kwargs.items():
print ("%s : %s" %(key, value))
my_fun(a=' Welcome',b=' to',c=' plus2net')``````
Output
`````` plus2net
a :  Welcome
b :  to
c :  plus2net``````

## Docstrings

We can include details about the function for user understanding by writing some text about the function. This we can do by using three single quotes or by using three double quotes.
``````def my_add(x,y):
'''Takes two inputs and returns the sum'''
return x+y
Here the output of the second print command.
``Takes two inputs and returns the sum``

## Using function from different file

Here is our function my_add() kept inside the file all_fun.py
all_fun.py
``````def my_add(x,y):
return("Sum :", x+y)``````
Our main file main.py uses this function. ( both files are kept in same directory )

main.py
``````from all_fun import  my_add
a,b=4,5
Output is here
``('Sum :', 9)``

## Recursive function

Python recursive functions to call same function within the function code to get factorial of input

Function which calls itself during its execution.
To prevent recursive function to execute infinitely we need to keep conditional statement to come out of recursive.

Factorial of a number is multiplication of all number less than the input number.
``n! = n*(n-1)*(n-2)*(n-3) …. .* 1``
Let us understand this by using one example.
Factorial of a number
``````def fact(n):

print("The number is : ",n)
if n==1:
return 1
else:
result = n*fact(n-1)
print("Part factorial = ", result)
return result
fact(4)``````
Output is here
``````The number is :  4
The number is :  3
The number is :  2
The number is :  1
Part factorial =  2
Part factorial =  6
Part factorial =  24``````
There is a limit to using recursive functions calls. We can read the System setting and change this value to a new value by using getrecursionlimit() and setrecursionlimit() methods.
``````import sys
print(sys.getrecursionlimit()) # output 1000
sys.setrecursionlimit(2000)  # new limit to 2000
print(sys.getrecursionlimit()) # output 2000``````

## Greatest Common Divisor of two input numbers

``````a=int(input("Enter first number:"))
b=int(input("Enter second number:"))

def gcd(a,b):
if(b==0):
return a
else:
return gcd(b,a%b)

GCD=gcd(a,b)
print("GCD is: ",GCD)``````

## Sum of digits of an input number

``````n=int(input("Enter a positive number: "))
def sum_of_digits(n):
my_sum=0
while(n>0):
dig=n%10
my_sum+=dig
n=n//10
return my_sum
print(sum_of_digits(n))``````

Solution 2
``````a=input("Enter a Number :")
sum=0
for i in range(0,len(a)):
sum=sum+int(a[i])
print("sum of digits in number=%d"%sum)``````
There are some functions which are defined as part of the core Python. These functions are always available for use. We call them built in functions in Python.

Subscribe to our YouTube Channel here

## Subscribe

* indicates required
Subscribe to plus2net plus2net.com