Python Functions: A Deep Dive into Arguments & Parameters

Introduction to Python Functions
A function is a reusable block of code designed to perform a single, related action. Functions provide better modularity for your application and a high degree of code reusability.
As you’ve already seen, Python gives you many built-in functions like print() and len(), but you can also create your own functions—these are called user-defined functions.
Why Use Functions?
- Reusability: Write once, use many times. This saves space and prevents "copy-paste" errors.
- Modularity: Break down complex problems into smaller, manageable chunks. This makes debugging much easier.
- Abstraction: Once a function is defined, you only need to know its input and output, not the complex logic inside. It acts as a "black box."
Defining a Function in Python
To define a function, you use the def keyword followed by the function name and parentheses ().
The Basic Structure:
defKeyword: Starts the function definition.- Function Name: A unique identifier for the function.
- Parameters: Inputs listed inside the parentheses (optional).
- Docstring: An optional string describing what the function does.
- Indented Block: The actual logic of the function.
returnStatement: Sends a result back to the caller.
1def greet(name):
2 """This function greets the person passed in as a parameter"""
3 return f"Hello, {name}!"
4
5# Calling the function
6print(greet("TopicTrick"))Pro Tip: Docstrings
Always include a docstring for your functions. It helps other developers (and your future self) understand the purpose of the code without reading the logic.
Function Arguments & Parameters
Arguments are the values passed into the function when it is called. Python uses Call by Object Reference, meaning:
- Immutable Objects (int, str, tuple): Behave like "Pass by Value." Changes inside the function don't affect the original.
- Mutable Objects (list, dict): Behave like "Pass by Reference." Changes inside the function will affect the original.
Types of Arguments
| Type | Description |
|---|---|
| Required | Must be passed in the correct positional order. |
| Keyword | Passed with an identifier (key=value), allowing any order. |
| Default | Have a predefined value if no argument is provided. |
| Variable Length | Handle an arbitrary number of inputs using *args and **kwargs. |
1. Required & Keyword Arguments
1def describe_pet(animal_type, pet_name):
2 print(f"I have a {animal_type} named {pet_name}.")
3
4# Positional (Required)
5describe_pet("Hamster", "Harry")
6
7# Keyword (Order doesn't matter)
8describe_pet(pet_name="Goldie", animal_type="Fish")2. Variable Length Arguments: *args and **kwargs
Sometimes you don't know how many arguments will be passed. Python handles this with:
*args: Receives arguments as a Tuple.**kwargs: Receives arguments as a Dictionary.
1def make_pizza(size, *toppings):
2 print(f"\nMaking a {size}-inch pizza with:")
3 for topping in toppings:
4 print(f"- {topping}")
5
6make_pizza(12, "mushrooms", "peppers", "extra cheese")3. Special Parameters (Python 3.8+)
Python allows you to restrict how arguments are passed:
- Positional-Only (
/): Parameters before/must be positional. - Keyword-Only (
*): Parameters after*must be keyword-based.
1def bio(name, /, *, age):
2 print(f"{name} is {age} years old.")
3
4bio("Alex", age=25) # Works!
5# bio(name="Alex", age=25) # Raises TypeErrorAnonymous Functions: Lambda Expressions
A Lambda function is a small, one-line function without a name. They are often used for short-lived tasks or as arguments to higher-order functions like sort().
1# Standard function
2def add(x, y):
3 return x + y
4
5# Equivalent Lambda
6add_lambda = lambda x, y: x + y
7
8print(add_lambda(5, 3)) # Output: 8Caution with Mutable Defaults
Avoid using mutable objects like empty lists `[]` or dictionaries `{}` as default arguments. They are initialized only once, meaning data will persist between multiple function calls!
Conclusion
Functions are the building blocks of any robust Python application. By mastering parameters, arguments, and return types, you can write cleaner, more efficient, and modular code.
What's Next?
Move on to Python Scope & LEGB Rule to understand how variables are accessed within and outside these functions.
