default as a keyword argument for dict.get and dict.pop

Hello! Do you know if there has been discussions around why is the default argument is positional only in the dict methods get and pop? I think ``` d.get(key, default=3) ``` way more readable than ``` d.get(key, 3) ``` specially since max and min builtin functions use default as a keyword argument.

On Tue, Jun 07, 2022 at 02:28:51PM -0000, martineznicolas41541@gmail.com wrote:
Do you know if there has been discussions around why is the default argument is positional only in the dict methods get and pop?
Its probably just left over from earlier versions of Python when builtin functions only used positional arguments. Positional arguments are a little faster than keyword arguments, and especially for builtin functions, easier to program. You could try making an enhancement request on the bug tracker and see if any one is willing to do the work. -- Steve

On Wed, 8 Jun 2022 at 00:36, <martineznicolas41541@gmail.com> wrote:
With min and max, it MUST be a keyword argument, because positional arguments are the values to be compared. So I think the main reason is "because nobody ever bothered to do it". If there's enough value in it, that could probably be changed, although mere consistency alone isn't a very strong argument. ChrisA

On 6/7/2022 4:59 PM, Chris Angelico wrote:
I suspect it's been this way because the API is so old. Now that we have Argument Clinic it would be easier to implement as a keyword argument. But there may also be a performance issue with keyword arguments vs. positional. People are touchy when it comes to dicts! Eric

On 08/06/2022 15:40, Eric V. Smith via Python-ideas wrote:
True (and rightly so). But all that is required is that there is no significant slow-down when the positional argument is used. Does that sound feasible? People can always choose not to use the keyword form. Best wishes Rob Cliffe

On Tue, Jun 07, 2022 at 02:28:51PM -0000, martineznicolas41541@gmail.com wrote:
Do you know if there has been discussions around why is the default argument is positional only in the dict methods get and pop?
Its probably just left over from earlier versions of Python when builtin functions only used positional arguments. Positional arguments are a little faster than keyword arguments, and especially for builtin functions, easier to program. You could try making an enhancement request on the bug tracker and see if any one is willing to do the work. -- Steve

On Wed, 8 Jun 2022 at 00:36, <martineznicolas41541@gmail.com> wrote:
With min and max, it MUST be a keyword argument, because positional arguments are the values to be compared. So I think the main reason is "because nobody ever bothered to do it". If there's enough value in it, that could probably be changed, although mere consistency alone isn't a very strong argument. ChrisA

On 6/7/2022 4:59 PM, Chris Angelico wrote:
I suspect it's been this way because the API is so old. Now that we have Argument Clinic it would be easier to implement as a keyword argument. But there may also be a performance issue with keyword arguments vs. positional. People are touchy when it comes to dicts! Eric

On 08/06/2022 15:40, Eric V. Smith via Python-ideas wrote:
True (and rightly so). But all that is required is that there is no significant slow-down when the positional argument is used. Does that sound feasible? People can always choose not to use the keyword form. Best wishes Rob Cliffe
participants (6)
-
Barry
-
Chris Angelico
-
Eric V. Smith
-
martineznicolas41541@gmail.com
-
Rob Cliffe
-
Steven D'Aprano