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:
15
Default 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
4
Example 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: 30
Keyword 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))