[Python-ideas] Keyword only argument on function call

Jonathan Fine jfine2358 at gmail.com
Thu Sep 6 12:40:38 EDT 2018


Hi Anders

Thank you for your interesting message. I'm sure it's based on a real
need. You wrote:

> I have a working implementation for a new syntax which would make using keyword arguments a lot nicer. Wouldn't it be awesome if instead of:
>         foo(a=a, b=b, c=c, d=3, e=e)
> we could just write:
>         foo(*, a, b, c, d=3, e)
> and it would mean the exact same thing?

I assume you're talking about defining functions.  Here's something
that already works in Python.

      >>> def fn(*, a, b, c, d, e): return locals()
      >>> fn.__kwdefaults__ = dict(a=1, b=2, c=3, d=4, e=5)
      >>> fn()
      {'d': 4, 'b': 2, 'e': 5, 'c': 3, 'a': 1}

And to pick up something from the namespace

      >>> eval('aaa', fn.__globals__)
      'telltale'

Aside: This is short, simple and unsafe. Here's a safer way

      >>> __name__
      '__main__'
      >>> import sys
      >>> getattr(sys.modules[__name__], 'aaa')
     'telltale'

>From this, it should be easy to construct exactly the dict() that you
want for the kwdefaults.

-- 

Jonathan


More information about the Python-ideas mailing list