You can pass an arbitrary number of keyword arguments to a method in Python using **kwargs.
This is a dictionary and you can iterate over items(), keys() and values() and do all the usual dict stuff.
However if you say, delete an item from the dictionary from within a method it does not change the dict that was passed in.
Example with ordinary dict.
def filter_args(kwargs):
for k, v in kwargs.items():
if v > 10:
del kwargs[k]
args = {"a":12, "b":2}
filter_args(args)
print args
This prints the following
{'b': 2}
Now an example with **
def filter_args(**kwargs):
for k, v in kwargs.items():
if v > 10:
del kwargs[k]
args = {"a":12, "b":2}
filter_args(**args)
print args
This prints
{'a': 12, 'b': 2}
It only changed the dict inside the method.