Welcome to Day 3! Today, we transition from writing basic scripts to building reusable, modular, and highly flexible building blocks. We will look at how Python handles arguments, the strict rules of variable scope, and how functions can be treated as first-class citizens to create highly dynamic utilities. 🚀

1. Parameters & Arguments (Default & Keyword-Only) ⚙️

In Python, you can define parameters that make your functions incredibly flexible.

Default Arguments: Allow you to set fallback values for parameters if the caller doesn't provide them.

Keyword-Only Arguments: Enforce that certain arguments must be passed by name rather than position. You declare these by placing an asterisk * in your parameter list; everything after the * must be named.