[Python-ideas] Ordering keyword dicts
Eric Snow
ericsnowcurrently at gmail.com
Mon Jun 10 16:22:19 CEST 2013
More information about the Python-ideas mailing list
Mon Jun 10 16:22:19 CEST 2013
- Previous message: [Python-ideas] Ordering keyword dicts
- Next message: [Python-ideas] Mixed script numbers. Was: Unicode minus sign in numeric conversions
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Mon, Jun 10, 2013 at 1:09 AM, Alexander Belopolsky <alexander.belopolsky at gmail.com> wrote: > I started experimenting with a patch on top > of issue16991 which is essentially this: > > > --- a/Python/ceval.c Mon Jun 10 02:24:00 2013 -0400 > +++ b/Python/ceval.c Mon Jun 10 02:58:38 2013 -0400 > @@ -3378,7 +3378,7 @@ > > /* Parse arguments. */ > if (co->co_flags & CO_VARKEYWORDS) { > - kwdict = PyDict_New(); > + kwdict = PyODict_New(); > if (kwdict == NULL) > goto fail; > i = total_args; > @@ -3441,7 +3441,7 @@ > keyword); > goto fail; > } > - PyDict_SetItem(kwdict, keyword, value); > + PyODict_SetItem(kwdict, keyword, value); > continue; > kw_found: > if (GETLOCAL(j) != NULL) { > > This was enough to get > >>>> def f(**kw): return kw > ... >>>> f(a=2, b=3) > OrderedDict([('a', 2), ('b', 3)]) That is pretty cool. > > In this particular code path, checking for another flag should not cost > anything in performance: even if compiler will not optimize it completely > the flags will be in a register and at most the other check will cost a few > CPU cycles and with no memory access. Good. From what I could see, there would be 7 calls that would change: PyEval_EvalCodeEx() PyDict_New() PyDict_SetItem() update_keyword_args() PyDict_New() PyDict_Copy() PyDict_SetItem() ext_do_call() PyDict_New() PyDict_Update() Each of these would switch on the flag on the function object. -eric
- Previous message: [Python-ideas] Ordering keyword dicts
- Next message: [Python-ideas] Mixed script numbers. Was: Unicode minus sign in numeric conversions
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-ideas mailing list