DEV Community

Cover image for *args and **kwargs explained in simple way
KARTHIK NARAYAN
KARTHIK NARAYAN

Posted on

*args and **kwargs explained in simple way

let's break down *args and **kwargs using some fun and relatable examples!

1: *args - The Ice Cream Sundae of Arguments

Imagine you're at an ice cream parlour, and you want to create your ultimate sundae with as many toppings as you like. Well, *args is like those endless toppings. You don't know how many you'll choose, and you don't need to specify them all upfront.

def make_sundae(base_flavor, *toppings):
    sundae = f"A {base_flavor} sundae with:"
    for topping in toppings:
        sundae += f" {topping}"
    return sundae

print(make_sundae("vanilla", "chocolate sauce", "sprinkles", "whipped cream"))
Enter fullscreen mode Exit fullscreen mode

Output:

A vanilla sundae with: chocolate sauce sprinkles whipped cream
Enter fullscreen mode Exit fullscreen mode

In this example, the *toppings parameter collects all the extra toppings you provide and bundles them into a tuple. It's like making a sundae with any number of toppings without knowing exactly how many.

2: **kwargs - The Party Planner of Arguments

Now, let's plan a party using **kwargs. You're the host, and you want everything to be just right, from decorations to music. **kwargs is like having a checklist of items with their specific details.

def plan_party(**details):
    plan = "Party Details:"
    for key, value in details.items():
        plan += f"\n- {key}: {value}"
    return plan

print(plan_party(theme="tropical", guests=50, music="DJ Bob", snacks="finger foods"))
Enter fullscreen mode Exit fullscreen mode

Output:

Party Details:
- theme: tropical
- guests: 50
- music: DJ Bob
- snacks: finger foods
Enter fullscreen mode Exit fullscreen mode

In this example, the **details parameter collects the named arguments and their values into a dictionary. It's like planning a party with a bunch of different aspects, each with its specific information.

3: Combining *args and **kwargs - The Deadly-Act Show

Now, let's bring out the big guns and combine *args and **kwargs in a single function. Imagine you're ordering a customizable burger with various toppings, and you also want to note down specific preferences.

def custom_burger(base, *toppings, **preferences):
    burger = f"You ordered a {base} burger with:"
    for topping in toppings:
        burger += f" {topping}"
    burger += "\nPreferences:"
    for key, value in preferences.items():
        burger += f"\n- {key}: {value}"
    return burger

print(custom_burger("beef", "cheese", "bacon", dressing="mayo", sides="fries"))
Enter fullscreen mode Exit fullscreen mode

Output:

You ordered a beef burger with: cheese bacon
Preferences:
- dressing: mayo
- sides: fries
Enter fullscreen mode Exit fullscreen mode

In this example, you're using both *args and **kwargs in the same function. The *toppings collects extra toppings as a tuple, while **preferences collects named preferences as a dictionary. It's like crafting a burger with various toppings and specifying your unique preferences.

And there you have it! *args and **kwargs are your dynamic duos for handling flexible function arguments in Python. Just like creating custom sundaes, planning parties, or building the perfect burger, these concepts let you handle a variety of inputs with flair and finesse.
Until next time, keep coding and keep smiling, because Python is all about making the magic happen! 🐍✨
Happy coding!!!

Top comments (1)

Collapse
 
koha profile image
Joshua Omobola

Thanks for sharing @karthikswaminathan