Skip to content
Fix Code Error

Use of *args and **kwargs

March 13, 2021 by Code Error
Posted By: Anonymous

So I have difficulty with the concept of *args and **kwargs.

So far I have learned that:

  • *args = list of arguments – as positional arguments
  • **kwargs = dictionary – whose keys become separate keyword arguments and the values become values of these arguments.

I don’t understand what programming task this would be helpful for.

Maybe:

I think to enter lists and dictionaries as arguments of a function AND at the same time as a wildcard, so I can pass ANY argument?

Is there a simple example to explain how *args and **kwargs are used?

Also the tutorial I found used just the “*” and a variable name.

Are *args and **kwargs just placeholders or do you use exactly *args and **kwargs in the code?

Solution

The syntax is the * and **. The names *args and **kwargs are only by convention but there’s no hard requirement to use them.

You would use *args when you’re not sure how many arguments might be passed to your function, i.e. it allows you pass an arbitrary number of arguments to your function. For example:

>>> def print_everything(*args):
        for count, thing in enumerate(args):
...         print( '{0}. {1}'.format(count, thing))
...
>>> print_everything('apple', 'banana', 'cabbage')
0. apple
1. banana
2. cabbage

Similarly, **kwargs allows you to handle named arguments that you have not defined in advance:

>>> def table_things(**kwargs):
...     for name, value in kwargs.items():
...         print( '{0} = {1}'.format(name, value))
...
>>> table_things(apple = 'fruit', cabbage = 'vegetable')
cabbage = vegetable
apple = fruit

You can use these along with named arguments too. The explicit arguments get values first and then everything else is passed to *args and **kwargs. The named arguments come first in the list. For example:

def table_things(titlestring, **kwargs)

You can also use both in the same function definition but *args must occur before **kwargs.

You can also use the * and ** syntax when calling a function. For example:

>>> def print_three_things(a, b, c):
...     print( 'a = {0}, b = {1}, c = {2}'.format(a,b,c))
...
>>> mylist = ['aardvark', 'baboon', 'cat']
>>> print_three_things(*mylist)
a = aardvark, b = baboon, c = cat

As you can see in this case it takes the list (or tuple) of items and unpacks it. By this it matches them to the arguments in the function. Of course, you could have a * both in the function definition and in the function call.

Answered By: Anonymous

Related Articles

  • What is the worst programming language you ever worked with?
  • How do I merge two dictionaries in a single expression…
  • Aurelia - help understanding some binding behavior that I'm…
  • How do SO_REUSEADDR and SO_REUSEPORT differ?
  • Search match multiple values in single field in…
  • CSS Variable trough Polymer (dynamically loaded) elements
  • Aurelia issue with setting element class based on obj.id ===…
  • Getting started with Haskell
  • What's the difference between KeyDown and KeyPress in .NET?
  • Creating a singleton in Python

Disclaimer: This content is shared under creative common license cc-by-sa 3.0. It is generated from StackExchange Website Network.

Post navigation

Previous Post:

Working copy ✘✘✘ locked and cleanup failed in SVN

Next Post:

How to change the text of a button in jQuery?

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

  • Get code errors & solutions at akashmittal.com
© 2022 Fix Code Error