Python Functions

Python, a high-level, interpreted programming language, is known for its simplicity and readability. One of the most powerful features of Python is its ability to define and manipulate functions. Functions in Python are blocks of reusable code that perform a specific task. They provide a way to structure your code in a logical and reusable manner.

This tutorial will delve into the world of Python functions, providing you with a comprehensive understanding of how to define, use, and manipulate them.

Defining Python Functions

In Python, functions are defined using the def keyword, followed by a unique function name, parentheses (), and a colon :. The function’s body, which contains the code to be executed when the function is called, is indented under the function definition. Let’s look at a simple example:

def greet():
    """This function displays 'Hello World!'"""
    print('Hello World!')
Python

In the above example, greet is a function that prints “Hello World!” when called. The string within triple quotes """ """ is a docstring that provides a brief description of the function.

Calling Python Functions

To execute a function, you need to call it. This is done by using the function name followed by parentheses. Let’s call our greet function:

greet()

So the complete code would be as follow (which includes both the function and function caller):

def greet():
    """This function displays 'Hello World!'"""
    print('Hello World!')

"""The following line call the function greeet()"""  
greet()
Python

Output:

Hello World!

Function Parameters and Arguments

Python functions can take parameters, which are values that the function uses to perform its task. Parameters are specified within the parentheses in the function definition, and the values passed to these parameters when calling the function are known as arguments.

def greet(name):
    """This function greets the person passed in as a parameter"""
    print(f"Hello, {name}!")
Python

In the above example, name is a parameter. When we call the function, we pass an argument to this parameter:

greet("Alice")

The complete code is as follows:

def greet(name):
    """This function greets the person passed in as a parameter"""
    print(f"Hello, {name}!")

greet("Alice")
Python

Output:

Hello, Alice!

Python Functions with Multiple Parameters

A Python function can have multiple parameters. Here’s an example:

def add_numbers(num1, num2):
    """This function adds two numbers"""
    result = num1 + num2
    print(f"The sum is {result}")
Python

When calling this function, we pass two arguments:

add_numbers(5, 3)

The complete code is as follows:

def add_numbers(num1, num2):
    """This function adds two numbers"""
    result = num1 + num2
    print(f"The sum is {result}")
    
add_numbers(5, 3)
Python

Output:

The sum is 8

Python Functions with Return Values

Python functions can return a result that can be stored in a variable or used in any way you like. The return keyword is used to exit a function and return a value. Here’s an example:

def square(number):
    """This function returns the square of a number"""
    return number ** 2
Python

In this example, the square function returns the square of the input number. We can store this returned value in a variable:

result = square(4)
print(result)

The complete code is as follows:

def square(number):
    """This function returns the square of a number"""
    return number ** 2
result = square(4)
print(result)
Python

Output:

16

Default and Keyword Arguments in Python Functions

Python functions allow for default values for parameters. If an argument is not provided for a parameter with a default value, the function uses the default value. Furthermore, Python allows functions to be called using keyword arguments, where each argument is identified by the parameter name. This allows for arguments to be passed in any order.

def greet(name="Guest", message="Welcome to our website!"):
    """This function greets a user with a message"""
    print(f"Hello, {name}. {message}")
Python

In this function, name and message have default values. If we call the function without arguments, it uses the default values:

greet()

The complete code is as follows:

def greet(name="Guest", message="Welcome to our website!"):
    """This function greets a user with a message"""
    print(f"Hello, {name}. {message}")
greet()
Python

Output:

Hello, Guest. Welcome to our website!

But if we provide arguments, it uses those:

def greet(name="Guest", message="Welcome to our website!"):
    """This function greets a user with a message"""
    print(f"Hello, {name}. {message}")
greet("Alice", "Glad to see you!")
Python

Output:

Hello, Alice. Glad to see you!

We can also call the function using keyword arguments:

def greet(name="Guest", message="Welcome to our website!"):
    """This function greets a user with a message"""
    print(f"Hello, {name}. {message}")
greet(message="How's your day?", name="Bob")
Python

Output:

Hello, Bob. How's your day?

As you can see, Python functions are incredibly flexible and powerful. They allow you to write reusable code that can be customized to suit your needs. Whether you’re a beginner just starting out with Python or an experienced developer looking to refine your skills, understanding Python functions is crucial to writing efficient, effective code.

Why are Python Functions Important?

Python functions are essential for several reasons:

  1. Code reusability: Once a function is defined, it can be used repeatedly in your program. You don’t have to write the same code again and again. For instance, we can call our greet function multiple times with different names:
def greet(name):
    """This function greets the person passed in as a parameter"""
    print(f"Hello, {name}!")
greet("Alice")
greet("Bob")
greet("Charlie")
Python
  1. Code organization: Functions allow you to segment your code into manageable pieces. Each function performs a specific task, making your code easier to read and debug.
  2. Code maintenance: If a task is performed in several places in the program, and if you need to change the way the task is performed, then you only need to change the function’s code. For example, if we want to change our greeting message, we only need to modify the greet function.

Types of Functions in Python

Python supports various types of functions, including:

  1. Built-in functions: These are predefined functions available in Python, like print(), id(), type(), etc.
  2. User-defined functions: These are the functions that we define ourselves to perform specific tasks.
  3. Anonymous functions: Also called lambda functions, they are not declared with the def keyword.
  4. Recursive functions: A function that calls itself during its execution.

Python Function Arguments

In Python, you can define a function that takes variable number of arguments. Here are different types of function arguments:

  1. Required arguments: These arguments are passed to a function in correct positional order. The number of arguments in the function call should match exactly with the function definition.
def print_name(name):
    """This function prints the name"""
    print(name)

print_name("John")  # This is correct
print_name()  # This will raise an error
Python

  1. Keyword arguments: When we call functions in this way, the order (position) of the arguments can be changed. We can specify the argument name along with its value during the function call.
def greet(name, greeting):
    """This function greets the person with the provided greeting"""
    print(f"{greeting}, {name}!")

greet(name="John", greeting="Hello")  # This is correct
greet(greeting="Hello", name="John")  # This is also correct
Python

  1. Default arguments: A default argument is an argument that assumes a default value if a value is not provided in the function call. They are defined in the function definition.
def greet(name, greeting="Hello"):
    """This function greets the person with the provided greeting"""
    print(f"{greeting}, {name}!")

greet("John")  # This will print: Hello, John!
greet("John", "Good morning")  # This will print: Good morning, John!
Python

  1. Variable-length arguments: These arguments are not named in the function definition. They are used when the number of arguments are not known. They are defined using asterisks (*).
def add(*numbers):
    """This function adds all the numbers provided as arguments"""
    return sum(numbers)

print(add(1, 2, 3, 4, 5))  # This will print: 15
Python

Python Recursive Functions

Python Lambda Functions

In summary

Python functions are a vital part of Python programming. They help us to organize and reuse our code, making it more readable and efficient. This tutorial provided a comprehensive guide on Python functions, their declaration, usage, and best practices.

Frequently Asked Questions (FAQ)

  1. What are the functions in Python?

    Functions in Python are blocks of reusable code that perform a specific task. They are defined using the def keyword, and they can take parameters and return values.

  2. What are the 15 list functions in Python?

    Python provides several built-in functions for lists, including len(), max(), min(), sorted(), list(), append(), extend(), insert(), remove(), pop(), clear(), index(), count(), sort(), and reverse().

  3. Are there 3 types of Python functions?

    Python functions can be categorized into three types: built-in functions (like print(), len(), etc.), user-defined functions (functions that users create), and anonymous functions (also known as lambda functions).

  4. What are the four functions in Python?

    Python has many functions, but four commonly used ones are print() for outputting data to the console, len() for getting the length of an object, type() for determining the data type of an object, and input() for getting user input.

Scroll to Top