Understanding keyword arguments in Python is a crucial step for every beginner aiming to write clean, readable, and flexible code. In this article, we’ll dive deep into how keyword arguments work, their differences from positional arguments, and how to use them effectively with practical examples and exercises.
What Are Keyword Arguments in Python?
In Python, keyword arguments are used when you call a function by explicitly naming the parameters. This means that the order of arguments does not matter as long as the parameter names are correct. Keyword arguments improve code readability and make your function calls more flexible.

For example, let’s define a simple function that accepts keyword arguments:
def introduce(name, age, country): print(f"My name is {name}, I'm {age} years old, and I live in {country}.") # Calling with positional arguments introduce("Alice", 25, "USA") # Calling with keyword arguments introduce(age=25, country="USA", name="Alice")
Both calls above will produce the same result, but using keyword arguments makes the function call easier to understand, especially when functions have many parameters.
Advantages of Using Keyword Arguments
- Improved Readability: You can easily understand what each value represents.
- Flexibility: The order of arguments can be changed.
- Default Values: You can skip optional arguments if defaults are provided.
- Reduced Errors: Prevent mistakes due to argument order confusion.
Keyword Arguments with Default Values
Functions often include default values for parameters. These defaults can be overridden when needed by using keyword arguments.
def greet(name, message="Hello"): print(f"{message}, {name}!") # Using the default message greet("Alice") # Overriding the default with a keyword argument greet("Bob", message="Good morning")
Output:
Hello, Alice! Good morning, Bob!
Combining Positional and Keyword Arguments
Python allows you to mix positional and keyword arguments in the same function call. However, positional arguments must always come first, before any keyword arguments.
def order_item(item, quantity, price): print(f"You ordered {quantity}x {item} for ${price * quantity:.2f}") # Correct order_item("Apple", quantity=3, price=2.5) # Incorrect - positional argument after keyword # order_item(item="Apple", 3, price=2.5) # ❌ SyntaxError
Using Arbitrary Keyword Arguments (**kwargs)
Sometimes, you may not know how many keyword arguments a function will receive. In such cases, you can use **kwargs to accept an arbitrary number of keyword arguments.
def describe_pet(**kwargs): for key, value in kwargs.items(): print(f"{key}: {value}") describe_pet(name="Buddy", animal="Dog", age=4, color="Brown")
Output:
name: Buddy animal: Dog age: 4 color: Brown
The **kwargs
parameter packs all keyword arguments into a dictionary, which makes it very powerful for building flexible functions and APIs.
Practical Exercise: Build a Flexible Product Description
Let’s create a more practical example where we build a function that takes various keyword arguments to describe a product in an online store.
def product_info(**kwargs): print("=== Product Information ===") for key, value in kwargs.items(): print(f"{key.capitalize()}: {value}") # Example usage product_info( name="Wireless Mouse", brand="LogiTech", price=199000, stock=25, color="Black" )
Output:
=== Product Information === Name: Wireless Mouse Brand: LogiTech Price: 199000 Stock: 25 Color: Black
This example demonstrates how **kwargs
makes a function dynamic and scalable. You can add or remove product attributes without modifying the function structure.
Exercise: Practice Keyword Arguments
Try the following exercise to strengthen your understanding of Python keyword arguments:
- Create a function called
calculate_salary
that accepts keyword arguments likename
,base_salary
,bonus
, andtax_rate
. - Calculate the total salary using the formula:
total = base_salary + bonus - (base_salary * tax_rate)
. - Print a formatted string showing the employee name and total salary.
def calculate_salary(**kwargs): name = kwargs.get("name", "Unknown") base_salary = kwargs.get("base_salary", 0) bonus = kwargs.get("bonus", 0) tax_rate = kwargs.get("tax_rate", 0.1) total = base_salary + bonus - (base_salary * tax_rate) print(f"Employee: {name}, Total Salary: {total:.2f}") # Test calculate_salary(name="Rina", base_salary=5000, bonus=1000, tax_rate=0.05) calculate_salary(name="Tomi", base_salary=4000)
Output:
Employee: Rina, Total Salary: 5750.00 Employee: Tomi, Total Salary: 3600.00
As you can see, using keyword arguments with **kwargs
allows you to create flexible functions that handle various input scenarios with ease.
Best Practices for Keyword Arguments
- Use keyword arguments when a function has multiple optional parameters.
- Prefer keyword arguments for readability and maintainability.
- Always put positional arguments before keyword arguments.
- Use
**kwargs
for flexible and scalable code. - Document the function to specify what keyword arguments are expected.
Conclusion
Practicing Python keyword arguments is essential for writing elegant, professional, and reusable code. You’ve learned how to define functions using keyword arguments, set default values, mix positional and keyword arguments, and use **kwargs
for dynamic inputs. Continue experimenting with different cases to fully master this concept, as it will help you build more robust Python applications in the future.
Now it’s your turn! Try creating your own function that uses keyword arguments to manage data dynamically—such as managing student grades, vehicle data, or user profiles.