IMO, No. With Py2, the caller has the freedom to positionally pass values against the kwargs (and with py3 as well, if you remove the '*' after positional args). Hence, if your API is forcing the caller to pass some values only via kwargs, then that's a restriction that's non-obvious and deviates from the general pattern. As the API provider, you need to define known and unknown arguments (positional or keyword) and trust that the caller knows how to invoke them properly.
It is common to use kwargs.pop("key", <default>) in __init__ of derived classes, where your derived class consumes a few arguments of your own, and you'd like to pass the remainder of **kwargs to the baseclass's __init__ via super(). This is where you absolve yourself from having to redeclare parent's arguments in the derived class's __init__ (which is a big relief, and outweighs other negatives related to documentation of args). If you wish for `my_func` to be equivalent in behaviour in py2 and py3, you should include **kwargs in your py3's function signature. However, IMO its better to completely avoid enforcing kwargs usage on the caller. -Praveen On 11 August 2016 at 01:30, Sudheer Satyanarayana <sudheer....@sudheer.net> wrote: > Hello BangPypers, > > Python 3 has this nifty feature of including the * in the argument list to > indicate the end of positional arguments and the beginning of keyword-only > arguments. > > For example: > def my_func(a, b, *, kw1=None, kw2=None): pass > > In Python 2 you could achieve the same goal of enforcing keyword-only > arguments using a technique like below example function: > > def my_func(a, b, **kwargs): > kw1 = kwargs.pop('kw1', None) > kw2 = kwargs.pop('kw2', None) > > Would you consider this technique of enforcing keyword-only argument in > Python 2 idiomatic? > > I understand that it could be a matter of personal taste. But I'm curious > to know what other Python programmers think about it. > > - > Sudheer Satyanarayana > > > _______________________________________________ > BangPypers mailing list > BangPypers@python.org > https://mail.python.org/mailman/listinfo/bangpypers > _______________________________________________ BangPypers mailing list BangPypers@python.org https://mail.python.org/mailman/listinfo/bangpypers