Search code examples
pythonkeyword-argument

Can you have keyword arguments without supplying a default value?


I am used to having function/method definitions like so in Python:

def my_function(arg1=None , arg2='default'):
    ... do stuff here

If I don't supply arg1 (or arg2), then the default value of None (or 'default') is assigned.

Can I specify keyword arguments like this, but without a default value? I would expect it to raise an error if the argument was not supplied.


Solution

  • You can in modern Python (3, that is):

    >>> def func(*, name1, name2):
    ...     print(name1, name2)
    ...     
    >>> func()
    Traceback (most recent call last):
      File "<ipython-input-5-08a2da4138f6>", line 1, in <module>
        func()
    TypeError: func() missing 2 required keyword-only arguments: 'name1' and 'name2'    
    >>> func("Fred", "Bob")
    Traceback (most recent call last):
      File "<ipython-input-7-14386ea74437>", line 1, in <module>
        func("Fred", "Bob")
    TypeError: func() takes 0 positional arguments but 2 were given
    
    >>> func(name1="Fred", name2="Bob")
    Fred Bob