I hope this helps you . When you define a function with a parameter like *args in python, it collects all the unnamed, non key-worded variables into a list named args. When you define a function with a parameter like **kwargs in python, it collects all of your key-worded variables into a dictionary named kwargs, where the key is the variable name and the value is the value. So what you've done is put 17.08.2019 into the greeting parameter, put nothing into emp_names, and put the key-worded arguments into items. Your first for loop will do nothing because emp_names is empty. In your second for loop, you print the dictionary items twice. Google *args and **kwargs in python if you're still confused.