Functions are fundamental building blocks in Python, enabling you to write reusable and organized code. In this tutorial, you’ll learn how to define, call, and effectively use functions.
What is a Function?
In Python, a function is a reusable block of code designed to perform a specific task. Functions allow you to break down your code into smaller, manageable chunks, improving readability, maintainability, and modularity.
Here’s an analogy:
- Function: A recipe for baking a cake
- Input: Ingredients (parameters/arguments)
- Output: Finished cake (returned value)
Defining a Function
To define a function in Python, use the def keyword, followed by the function name and parentheses (). End the declaration line with a colon :.
def greet():
print("Hello, World!")Calling a Function
To call (invoke) a function, simply use the function’s name followed by parentheses:
# Calling the greet function
greet()Output:
Hello, World!Function Parameters and Arguments
Functions can take parameters (inputs) that allow them to perform different tasks based on different values.
def greet(name):
print(f"Hello, {name}!")
# Calling with argument
greet("Alice")Output:
Hello, Alice!Returning Values
Functions can also return values using the return keyword, allowing you to reuse the result elsewhere:
def add(a, b):
return a + b
result = add(10, 5)
print(result)Output:
15Default Parameter Values
You can assign default values to function parameters. If an argument isn’t provided, Python will use the default value:
def greet(name="Guest"):
print(f"Hello, {name}!")
greet("Alice")
greet()Output:
Hello, Alice!
Hello, Guest!Variable-Length Arguments
Sometimes, you don’t know how many arguments a function might receive. Python allows you to handle this using:
*args: For non-keyword variable-length arguments**kwargs: For keyword variable-length arguments
Example with *args:
def print_numbers(*args):
for num in args:
print(num)
print_numbers(1, 2, 3, 4)Output:
1
2
3
4Example with **kwargs:
def user_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
user_info(name="Alice", age=30)Output:
name: Alice
age: 30Keyword Arguments
You can specify arguments by name rather than position. This increases readability:
def describe_pet(name, animal):
print(f"I have a {animal} named {name}.")
describe_pet(animal="dog", name="Buddy")Output:
I have a dog named Buddy.Best Practices
Name functions clearly: get_user_info() rather than user()
Avoid overly complex functions: Split larger functions into smaller, simpler ones
Write docstrings: Explain what a function does, parameters, and returned values.
Example with Docstrings:
def multiply(a, b):
"""Multiply two numbers and return the result."""
return a * b
print(multiply(3, 4))