<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman, new york, times, serif;font-size:12pt"><DIV></DIV>
<DIV>Hi,</DIV>
<DIV> </DIV>
<DIV>By the way, a sorted **kwargs may slow down the speed of function invocation. But we do not know how often the function gets called.</DIV>
<DIV>So we mustn't enforce the dict to be sorted for it unpredictable defects in performance. I need to emphasize the UNPREDICTABLE.<BR> </DIV>Hongbao Chen<BR>Software Engineering School<BR>Xi'an Jiaotong University<BR>Cell:+8613891979195 
<DIV><BR></DIV>
<DIV style="FONT-FAMILY: times new roman, new york, times, serif; FONT-SIZE: 12pt"><BR>
<DIV style="FONT-FAMILY: arial, helvetica, sans-serif; FONT-SIZE: 13px"><FONT size=2 face=Tahoma>
<HR SIZE=1>
<B><SPAN style="FONT-WEIGHT: bold">发件人:</SPAN></B> "python-ideas-request@python.org" <python-ideas-request@python.org><BR><B><SPAN style="FONT-WEIGHT: bold">收件人:</SPAN></B> python-ideas@python.org<BR><B><SPAN style="FONT-WEIGHT: bold">发送日期:</SPAN></B> 2011/1/21 (周五) 9:59:06 上午<BR><B><SPAN style="FONT-WEIGHT: bold">主 题:</SPAN></B> Python-ideas Digest, Vol 50, Issue 36<BR></FONT><BR>Send Python-ideas mailing list submissions to<BR>    <A href="mailto:python-ideas@python.org" ymailto="mailto:python-ideas@python.org">python-ideas@python.org</A><BR><BR>To subscribe or unsubscribe via the World Wide Web, visit<BR>    <A href="http://mail.python.org/mailman/listinfo/python-ideas" target=_blank>http://mail.python.org/mailman/listinfo/python-ideas</A><BR>or, via email, send a message with subject or body 'help' to<BR>    <A href="mailto:python-ideas-request@python.org"
 ymailto="mailto:python-ideas-request@python.org">python-ideas-request@python.org</A><BR><BR>You can reach the person managing the list at<BR>    <A href="mailto:python-ideas-owner@python.org" ymailto="mailto:python-ideas-owner@python.org">python-ideas-owner@python.org</A><BR><BR>When replying, please edit your Subject line so it is more specific<BR>than "Re: Contents of Python-ideas digest..."<BR><BR><BR>Today's Topics:<BR><BR>  1. Re: A sorted version of **kwargs (Don Spaulding)<BR>  2. Re: A sorted version of **kwargs (MRAB)<BR>  3. Re: A sorted version of **kwargs (Alexander Belopolsky)<BR>  4. Re: A sorted version of **kwargs (Nick Coghlan)<BR>  5. Re: A sorted version of **kwargs (Hongbao Chen)<BR><BR><BR>----------------------------------------------------------------------<BR><BR>Message: 1<BR>Date: Thu, 20 Jan 2011 14:26:23 -0600<BR>From: Don Spaulding <<A href="mailto:donspauldingii@gmail.com"
 ymailto="mailto:donspauldingii@gmail.com">donspauldingii@gmail.com</A>><BR>To: Bruce Leban <<A href="mailto:bruce@leapyear.org" ymailto="mailto:bruce@leapyear.org">bruce@leapyear.org</A>><BR>Cc: <A href="mailto:python-ideas@python.org" ymailto="mailto:python-ideas@python.org">python-ideas@python.org</A><BR>Subject: Re: [Python-ideas] A sorted version of **kwargs<BR>Message-ID:<BR>    <AANLkTinvh22idu-PTNOEF=<A href="mailto:qu9njK4uBmxpc5LJ7CXW_6@mail.gmail.com" ymailto="mailto:qu9njK4uBmxpc5LJ7CXW_6@mail.gmail.com">qu9njK4uBmxpc5LJ7CXW_6@mail.gmail.com</A>><BR>Content-Type: text/plain; charset="iso-8859-1"<BR><BR>On Thu, Jan 20, 2011 at 2:05 PM, Bruce Leban <<A href="mailto:bruce@leapyear.org" ymailto="mailto:bruce@leapyear.org">bruce@leapyear.org</A>> wrote:<BR><BR>><BR>> On Thu, Jan 20, 2011 at 11:47 AM, Tim Delaney <<A href="mailto:timothy.c.delaney@gmail.com"
 ymailto="mailto:timothy.c.delaney@gmail.com">timothy.c.delaney@gmail.com</A><BR>> > wrote:<BR>><BR>>><BR>>> ['b':1] would then be ambiguous (appears to be a slice of a list). More<BR>>> obvious in the case of [1:2] ...<BR>>><BR>><BR>> We use parenthesis for tuples and avoid the ambiguity by writing (1,).<BR>> In the same way, we could require your examples to be written ['b':1,] and<BR>> [1:2,]<BR>><BR><BR>Please, not this.  I like the idea of syntactic support for the odict, but<BR>no need to spread the (foo,) syntax around.  It's too easy to misinterpret<BR>when you do a quick scan of a body of code.<BR>-------------- next part --------------<BR>An HTML attachment was scrubbed...<BR>URL: <<A href="http://mail.python.org/pipermail/python-ideas/attachments/20110120/52185887/attachment-0001.html"
 target=_blank>http://mail.python.org/pipermail/python-ideas/attachments/20110120/52185887/attachment-0001.html</A>><BR><BR>------------------------------<BR><BR>Message: 2<BR>Date: Thu, 20 Jan 2011 20:28:41 +0000<BR>From: MRAB <<A href="mailto:python@mrabarnett.plus.com" ymailto="mailto:python@mrabarnett.plus.com">python@mrabarnett.plus.com</A>><BR>To: python-ideas <<A href="mailto:python-ideas@python.org" ymailto="mailto:python-ideas@python.org">python-ideas@python.org</A>><BR>Subject: Re: [Python-ideas] A sorted version of **kwargs<BR>Message-ID: <<A href="mailto:4D389AF9.5080608@mrabarnett.plus.com" ymailto="mailto:4D389AF9.5080608@mrabarnett.plus.com">4D389AF9.5080608@mrabarnett.plus.com</A>><BR>Content-Type: text/plain; charset=UTF-8; format=flowed<BR><BR>On 20/01/2011 19:47, Tim Delaney wrote:<BR>> On 21 January 2011 06:13, Bruce Leban <<A href="mailto:bruce@leapyear.org"
 ymailto="mailto:bruce@leapyear.org">bruce@leapyear.org</A><BR>> <mailto:<A href="mailto:bruce@leapyear.org" ymailto="mailto:bruce@leapyear.org">bruce@leapyear.org</A>>> wrote:<BR>><BR>>    Back to the original problem though: if the issue is that creating<BR>>    an ordered dict is clumsy and perhaps interfering with adoption and<BR>>    usage then perhaps the notation for ordered dict could be improved.<BR>>    Just as we can now use {...} for both dicts and sets, perhaps we<BR>>    could add<BR>><BR>>        [ 'b' : 1, 'a' : 2 ]<BR>><BR>>    as a more convenient way of writing<BR>><BR>>        OrderedDict([('b', 1), ('a', 2)])<BR>><BR>><BR>>    This is parallel to the way that [1,2] is an ordered container while<BR>>    {1,2} is unordered.<BR>><BR>><BR>> ['b':1]
 would then be ambiguous (appears to be a slice of a list). More<BR>> obvious in the case of [1:2] ...<BR>><BR>[snip]<BR>In what way is it ambiguous? [1] isn't ambiguous, is it?<BR><BR>spam[1] is subscripting and [1] is a list; spam[1 : 2] is slicing and<BR>[1 : 2] would be an ordered dict.<BR><BR><BR>------------------------------<BR><BR>Message: 3<BR>Date: Thu, 20 Jan 2011 15:57:34 -0500<BR>From: Alexander Belopolsky <<A href="mailto:alexander.belopolsky@gmail.com" ymailto="mailto:alexander.belopolsky@gmail.com">alexander.belopolsky@gmail.com</A>><BR>To: Tim Delaney <<A href="mailto:timothy.c.delaney@gmail.com" ymailto="mailto:timothy.c.delaney@gmail.com">timothy.c.delaney@gmail.com</A>><BR>Cc: <A href="mailto:python-ideas@python.org" ymailto="mailto:python-ideas@python.org">python-ideas@python.org</A><BR>Subject: Re: [Python-ideas] A sorted version of **kwargs<BR>Message-ID:<BR>   
 <AANLkTik=n8+hJF34o9ME-iQ2q=kKXfG=<A href="mailto:ePmKboTWUyLh@mail.gmail.com" ymailto="mailto:ePmKboTWUyLh@mail.gmail.com">ePmKboTWUyLh@mail.gmail.com</A>><BR>Content-Type: text/plain; charset=ISO-8859-1<BR><BR>On Thu, Jan 20, 2011 at 2:47 PM, Tim Delaney<BR><<A href="mailto:timothy.c.delaney@gmail.com" ymailto="mailto:timothy.c.delaney@gmail.com">timothy.c.delaney@gmail.com</A>> wrote:<BR>..<BR>> ['b':1] would then be ambiguous (appears to be a slice of a list). More<BR>> obvious in the case of?[1:2] ...<BR><BR>x[1:2], x[1:2,], and x[1:2, 3:4] are all valid syntaxes.  (NumPy uses<BR>the latter for multi-dimensional slicing.)  However, I don't see an<BR>ambiguity here.  We don't have an ambiguity between tuple syntax and<BR>function calls: (a, b, c) vs. f(a, b, c).<BR><BR><BR>------------------------------<BR><BR>Message: 4<BR>Date: Fri, 21 Jan 2011 10:54:23 +1000<BR>From: Nick Coghlan <<A
 href="mailto:ncoghlan@gmail.com" ymailto="mailto:ncoghlan@gmail.com">ncoghlan@gmail.com</A>><BR>To: Guido van Rossum <<A href="mailto:guido@python.org" ymailto="mailto:guido@python.org">guido@python.org</A>><BR>Cc: <A href="mailto:python-ideas@python.org" ymailto="mailto:python-ideas@python.org">python-ideas@python.org</A>, "M.-A. Lemburg" <<A href="mailto:mal@egenix.com" ymailto="mailto:mal@egenix.com">mal@egenix.com</A>><BR>Subject: Re: [Python-ideas] A sorted version of **kwargs<BR>Message-ID:<BR>    <AANLkTikj1b4q1KUfRoPaYwqpUdE=<A href="mailto:pZDAzTaewftK6y4k@mail.gmail.com" ymailto="mailto:pZDAzTaewftK6y4k@mail.gmail.com">pZDAzTaewftK6y4k@mail.gmail.com</A>><BR>Content-Type: text/plain; charset=ISO-8859-1<BR><BR>On Fri, Jan 21, 2011 at 2:42 AM, Guido van Rossum <<A href="mailto:guido@python.org" ymailto="mailto:guido@python.org">guido@python.org</A>> wrote:<BR>> On Thu, Jan 20, 2011 at 6:05 AM, M.-A.
 Lemburg <<A href="mailto:mal@egenix.com" ymailto="mailto:mal@egenix.com">mal@egenix.com</A>> wrote:<BR>>> Nick Coghlan wrote:<BR>>>> Yeah, simply making the kwargs dict always ordered is likely the way<BR>>>> we would do it. That's also the only solution with any chance of<BR>>>> working by default with the way most decorators are structured<BR>>>> (accepting *args and **kwargs and passing them to the wrapped<BR>>>> function).<BR>>><BR>>> -1.<BR>>><BR>>> How often do you really need this ?<BR>>><BR>>> In which of those cases wouldn't a static code analysis give you<BR>>> the call order of the parameters already ??<BR>>><BR>>> "Nice to have" is not good enough to warrant a slow down of<BR>>> all function calls involving keyword arguments, adding overhead<BR>>> for other Python implementations and possibly causing problems<BR>>>
 with 3rd party extensions relying on getting a PyDict for the<BR>>> keyword arguments object.<BR>><BR>> What he says.<BR><BR>I actually agree as well, but I was misremembering how the<BR>construction of the kwargs dict worked and hence was thinking that was<BR>the only possible way this could work (since the interpreter didn't<BR>know anything about the target function while building the dict).<BR>Actually checking with dis.dis and looking at the associated code in<BR>ceval.c corrected my misapprehension (the function is actually<BR>retrieved first, while the kwargs are still on the stack in the<BR>appropriate order, so it is theoretically possible for the function to<BR>influence how the args are stored).<BR><BR>So, as an alternative proposal, perhaps it would be possible to add a<BR>new protocol that allowed a callable to flag that an ordered<BR>dictionary should be used for kwargs (e.g. an "__ordered_call__"<BR>boolean attribute, with C
 level flags to speed up the common builtin<BR>callable cases). A @functools.ordered_call decorator could then just<BR>do "__ordered_call__ = True" to set the flag appropriately. (You could<BR>also be even more flexible and devise a protocol that supported any<BR>type for kwargs, but I think that would just be far more complicated<BR>without a corresponding increase in expressive power)<BR><BR>Ordinary calls that used "x=y" or "**d" would be slowed down<BR>marginally due to the check for the new attribute on the supplied<BR>callable, but that impact should be minimal (especially for the<BR>builtin cases, which would just be checking a C struct field) and<BR>other calls would be entirely unaffected.<BR><BR>The CPython specific impact would largely be limited to<BR>update_keyword_args() and implementing C level fields with associated<BR>__ordered_call__ properties on the various builtin callable objects.<BR>There would also need to be a new variant of
 PyEval_EvalCodeEx that<BR>either used an ordered dictionary for kwdict, or else allowed kwdict<BR>to be created and passed in by the calling code rather than implicitly<BR>created via PyDict_New().<BR><BR>A builtin version of collections.OrderedDict would still be a<BR>precursor to this idea though, so creating a _collections.OrderedDict<BR>C implementation still sounds like the right starting point for anyone<BR>that is particularly keen to see this idea progress.<BR><BR>Regards,<BR>Nick.<BR><BR>-- <BR>Nick Coghlan?? |?? <A href="mailto:ncoghlan@gmail.com" ymailto="mailto:ncoghlan@gmail.com">ncoghlan@gmail.com</A>?? |?? Brisbane, Australia<BR><BR><BR>------------------------------<BR><BR>Message: 5<BR>Date: Fri, 21 Jan 2011 09:58:41 +0800<BR>From: "Hongbao Chen" <<A href="mailto:microcore@yahoo.com.cn" ymailto="mailto:microcore@yahoo.com.cn">microcore@yahoo.com.cn</A>><BR>To: <<A href="mailto:python-ideas@python.org"
 ymailto="mailto:python-ideas@python.org">python-ideas@python.org</A>><BR>Subject: Re: [Python-ideas] A sorted version of **kwargs<BR>Message-ID:<BR>    <!&!AAAAAAAAAAAYAAAAAAAAAGTr5rf+rD9NmLF+0ao+1iuCggAAEAAAACvf3qXB2YNJuWd/o1VjxysBAAAAAA==@yahoo.com.cn><BR>    <BR>Content-Type: text/plain;    charset="gb2312"<BR><BR>Hey, guys<BR><BR>I must argue that make **kwargs sorted is really a terrible idea.<BR>Please think that when user wants a unsorted **kwargs, how can he or she<BR>bring the original unsorted dict back?<BR>When a dict is unsorted, we can sort it with implementation in Python/C<BR>interface or just python code for portability. That is what should be like!<BR><BR>Give users more control over behavior of dict. That is what I propose.<BR><BR>Best regards<BR><BR>Hongbao Chen<BR>XJTU<BR><BR>-----????-----<BR>???: python-ideas-bounces+microcore=<A href="mailto:yahoo.com.cn@python.org"
 ymailto="mailto:yahoo.com.cn@python.org">yahoo.com.cn@python.org</A><BR>[mailto:python-ideas-bounces+microcore=<A href="mailto:yahoo.com.cn@python.org" ymailto="mailto:yahoo.com.cn@python.org">yahoo.com.cn@python.org</A>] ??<BR><A href="mailto:python-ideas-request@python.org" ymailto="mailto:python-ideas-request@python.org">python-ideas-request@python.org</A><BR>????: 2011?1?21? 1:52<BR>???: <A href="mailto:python-ideas@python.org" ymailto="mailto:python-ideas@python.org">python-ideas@python.org</A><BR>??: Python-ideas Digest, Vol 50, Issue 34<BR><BR>Send Python-ideas mailing list submissions to<BR>    <A href="mailto:python-ideas@python.org" ymailto="mailto:python-ideas@python.org">python-ideas@python.org</A><BR><BR>To subscribe or unsubscribe via the World Wide Web, visit<BR>    <A href="http://mail.python.org/mailman/listinfo/python-ideas" target=_blank>http://mail.python.org/mailman/listinfo/python-ideas</A><BR>or, via
 email, send a message with subject or body 'help' to<BR>    <A href="mailto:python-ideas-request@python.org" ymailto="mailto:python-ideas-request@python.org">python-ideas-request@python.org</A><BR><BR>You can reach the person managing the list at<BR>    <A href="mailto:python-ideas-owner@python.org" ymailto="mailto:python-ideas-owner@python.org">python-ideas-owner@python.org</A><BR><BR>When replying, please edit your Subject line so it is more specific<BR>than "Re: Contents of Python-ideas digest..."<BR><BR><BR>Today's Topics:<BR><BR>  1. Re: A sorted version of **kwargs (Nick Coghlan)<BR>  2. Re: A sorted version of **kwargs (M.-A. Lemburg)<BR>  3. Re: A sorted version of **kwargs (Guido van Rossum)<BR>  4. Re: A sorted version of **kwargs (Imri Goldberg)<BR>  5. Re: A sorted version of **kwargs (geremy
 condra)<BR><BR><BR>----------------------------------------------------------------------<BR><BR>Message: 1<BR>Date: Thu, 20 Jan 2011 23:11:57 +1000<BR>From: Nick Coghlan <<A href="mailto:ncoghlan@gmail.com" ymailto="mailto:ncoghlan@gmail.com">ncoghlan@gmail.com</A>><BR>To: "Steven D'Aprano" <<A href="mailto:steve@pearwood.info" ymailto="mailto:steve@pearwood.info">steve@pearwood.info</A>><BR>Cc: <A href="mailto:python-ideas@python.org" ymailto="mailto:python-ideas@python.org">python-ideas@python.org</A><BR>Subject: Re: [Python-ideas] A sorted version of **kwargs<BR>Message-ID:<BR>    <AANLkTik5XECCCBcgVvapyE4yEyCVAkN1-sFfaot+<A href="mailto:wbqE@mail.gmail.com" ymailto="mailto:wbqE@mail.gmail.com">wbqE@mail.gmail.com</A>><BR>Content-Type: text/plain; charset=ISO-8859-1<BR><BR>On Thu, Jan 20, 2011 at 8:28 PM, Steven D'Aprano <<A href="mailto:steve@pearwood.info"
 ymailto="mailto:steve@pearwood.info">steve@pearwood.info</A>><BR>wrote:<BR>> I would be +0 on making **kwargs an ordered dict automatically, and -1 on<BR>> adding ***ordered_kwargs. Because kwargs is mostly used only for argument<BR>> passing, and generally with only a small number of items, it probably<BR>> doesn't matter too much if it's slightly slower than an unordered dict.<BR><BR>Yeah, simply making the kwargs dict always ordered is likely the way<BR>we would do it. That's also the only solution with any chance of<BR>working by default with the way most decorators are structured<BR>(accepting *args and **kwargs and passing them to the wrapped<BR>function).<BR><BR>To expand on Raymond's response in the previous thread on this topic,<BR>there are likely a number of steps to this process:<BR><BR>1. Provide a _collections.OrderedDict C implementation<BR>2. Create a PEP to gain agreement from other implementations<BR>(especially
 IronPython, PyPy and Jython) to proceed with the remaining<BR>steps<BR>3. Make it a builtin class (odict?) in its own right (with<BR>collections.OrderedDict becoming an alias for the builtin type)<BR>4. Update the interpreter to use the new builtin type for kwargs containers<BR><BR>Use various microbenchmarks to check that the use of the new odict<BR>builtin type instead of a plain dict doesn't slow things down too<BR>much.<BR><BR>Cheers,<BR>Nick.<BR><BR>-- <BR>Nick Coghlan?? |?? <A href="mailto:ncoghlan@gmail.com" ymailto="mailto:ncoghlan@gmail.com">ncoghlan@gmail.com</A>?? |?? Brisbane, Australia<BR><BR><BR>------------------------------<BR><BR>Message: 2<BR>Date: Thu, 20 Jan 2011 15:05:23 +0100<BR>From: "M.-A. Lemburg" <<A href="mailto:mal@egenix.com" ymailto="mailto:mal@egenix.com">mal@egenix.com</A>><BR>To: Nick Coghlan <<A href="mailto:ncoghlan@gmail.com" ymailto="mailto:ncoghlan@gmail.com">ncoghlan@gmail.com</A>><BR>Cc: <A
 href="mailto:python-ideas@python.org" ymailto="mailto:python-ideas@python.org">python-ideas@python.org</A><BR>Subject: Re: [Python-ideas] A sorted version of **kwargs<BR>Message-ID: <<A href="mailto:4D384123.6040105@egenix.com" ymailto="mailto:4D384123.6040105@egenix.com">4D384123.6040105@egenix.com</A>><BR>Content-Type: text/plain; charset=ISO-8859-1<BR><BR>Nick Coghlan wrote:<BR>> On Thu, Jan 20, 2011 at 8:28 PM, Steven D'Aprano <<A href="mailto:steve@pearwood.info" ymailto="mailto:steve@pearwood.info">steve@pearwood.info</A>><BR>wrote:<BR>>> I would be +0 on making **kwargs an ordered dict automatically, and -1 on<BR>>> adding ***ordered_kwargs. Because kwargs is mostly used only for argument<BR>>> passing, and generally with only a small number of items, it probably<BR>>> doesn't matter too much if it's slightly slower than an unordered dict.<BR>> <BR>> Yeah, simply making the kwargs dict always ordered
 is likely the way<BR>> we would do it. That's also the only solution with any chance of<BR>> working by default with the way most decorators are structured<BR>> (accepting *args and **kwargs and passing them to the wrapped<BR>> function).<BR><BR>-1.<BR><BR>How often do you really need this ?<BR><BR>In which of those cases wouldn't a static code analysis give you<BR>the call order of the parameters already  ?<BR><BR>"Nice to have" is not good enough to warrant a slow down of<BR>all function calls involving keyword arguments, adding overhead<BR>for other Python implementations and possibly causing problems<BR>with 3rd party extensions relying on getting a PyDict for the<BR>keyword arguments object.<BR><BR>-- <BR>Marc-Andre Lemburg<BR>eGenix.com<BR><BR>Professional Python Services directly from the Source  (#1, Jan 20 2011)<BR>>>> Python/Zope Consulting and Support ...        <A
 href="http://www.egenix.com/" target=_blank>http://www.egenix.com/</A><BR>>>> mxODBC.Zope.Database.Adapter ...            <A href="http://zope.egenix.com/" target=_blank>http://zope.egenix.com/</A><BR>>>> mxODBC, mxDateTime, mxTextTools ...        <A href="http://python.egenix.com/" target=_blank>http://python.egenix.com/</A><BR>________________________________________________________________________<BR><BR>::: Try our new mxODBC.Connect Python Database Interface for free ! ::::<BR><BR><BR>  eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48<BR>    D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg<BR>          Registered at Amtsgericht Duesseldorf: HRB 46611<BR>              <A href="http://www.egenix.com/company/contact/"
 target=_blank>http://www.egenix.com/company/contact/</A><BR><BR><BR>------------------------------<BR><BR>Message: 3<BR>Date: Thu, 20 Jan 2011 08:42:20 -0800<BR>From: Guido van Rossum <<A href="mailto:guido@python.org" ymailto="mailto:guido@python.org">guido@python.org</A>><BR>To: "M.-A. Lemburg" <<A href="mailto:mal@egenix.com" ymailto="mailto:mal@egenix.com">mal@egenix.com</A>><BR>Cc: <A href="mailto:python-ideas@python.org" ymailto="mailto:python-ideas@python.org">python-ideas@python.org</A><BR>Subject: Re: [Python-ideas] A sorted version of **kwargs<BR>Message-ID:<BR>    <AANLkTimQmVdoR-hMc3Gq9Md+<A href="mailto:_w7bvra6uV1K2NjZaWoZ@mail.gmail.com" ymailto="mailto:_w7bvra6uV1K2NjZaWoZ@mail.gmail.com">_w7bvra6uV1K2NjZaWoZ@mail.gmail.com</A>><BR>Content-Type: text/plain; charset=ISO-8859-1<BR><BR>On Thu, Jan 20, 2011 at 6:05 AM, M.-A. Lemburg <<A href="mailto:mal@egenix.com"
 ymailto="mailto:mal@egenix.com">mal@egenix.com</A>> wrote:<BR>> Nick Coghlan wrote:<BR>>> On Thu, Jan 20, 2011 at 8:28 PM, Steven D'Aprano <<A href="mailto:steve@pearwood.info" ymailto="mailto:steve@pearwood.info">steve@pearwood.info</A>><BR>wrote:<BR>>>> I would be +0 on making **kwargs an ordered dict automatically, and -1<BR>on<BR>>>> adding ***ordered_kwargs. Because kwargs is mostly used only for<BR>argument<BR>>>> passing, and generally with only a small number of items, it probably<BR>>>> doesn't matter too much if it's slightly slower than an unordered dict.<BR>>><BR>>> Yeah, simply making the kwargs dict always ordered is likely the way<BR>>> we would do it. That's also the only solution with any chance of<BR>>> working by default with the way most decorators are structured<BR>>> (accepting *args and **kwargs and passing them to the wrapped<BR>>>
 function).<BR>><BR>> -1.<BR>><BR>> How often do you really need this ?<BR>><BR>> In which of those cases wouldn't a static code analysis give you<BR>> the call order of the parameters already ??<BR>><BR>> "Nice to have" is not good enough to warrant a slow down of<BR>> all function calls involving keyword arguments, adding overhead<BR>> for other Python implementations and possibly causing problems<BR>> with 3rd party extensions relying on getting a PyDict for the<BR>> keyword arguments object.<BR><BR>What he says.<BR><BR>In addition, I wonder what the semantics would be if the caller passed<BR>**d where d was an *unordered* dict...<BR><BR>-- <BR>--Guido van Rossum (python.org/~guido)<BR><BR><BR>------------------------------<BR><BR>Message: 4<BR>Date: Thu, 20 Jan 2011 18:53:54 +0200<BR>From: Imri Goldberg <<A href="mailto:lorgandon@gmail.com"
 ymailto="mailto:lorgandon@gmail.com">lorgandon@gmail.com</A>><BR>To: Guido van Rossum <<A href="mailto:guido@python.org" ymailto="mailto:guido@python.org">guido@python.org</A>><BR>Cc: <A href="mailto:python-ideas@python.org" ymailto="mailto:python-ideas@python.org">python-ideas@python.org</A>, "M.-A. Lemburg" <<A href="mailto:mal@egenix.com" ymailto="mailto:mal@egenix.com">mal@egenix.com</A>><BR>Subject: Re: [Python-ideas] A sorted version of **kwargs<BR>Message-ID:<BR>    <<A href="mailto:AANLkTin0GApx57hHQXpQLZ00wmqC_zY_xxzyW8vpRgtN@mail.gmail.com" ymailto="mailto:AANLkTin0GApx57hHQXpQLZ00wmqC_zY_xxzyW8vpRgtN@mail.gmail.com">AANLkTin0GApx57hHQXpQLZ00wmqC_zY_xxzyW8vpRgtN@mail.gmail.com</A>><BR>Content-Type: text/plain; charset="iso-8859-1"<BR><BR>On Thu, Jan 20, 2011 at 6:42 PM, Guido van Rossum <<A href="mailto:guido@python.org" ymailto="mailto:guido@python.org">guido@python.org</A>> wrote:<BR>><BR>>
 > -1.<BR>> ><BR>> > How often do you really need this ?<BR>> ><BR>> > In which of those cases wouldn't a static code analysis give you<BR>> > the call order of the parameters already  ?<BR>> ><BR>> > "Nice to have" is not good enough to warrant a slow down of<BR>> > all function calls involving keyword arguments, adding overhead<BR>> > for other Python implementations and possibly causing problems<BR>> > with 3rd party extensions relying on getting a PyDict for the<BR>> > keyword arguments object.<BR>><BR>> What he says.<BR>><BR>> In addition, I wonder what the semantics would be if the caller passed<BR>> **d where d was an *unordered* dict...<BR><BR><BR>What if the default behavior stays as it is today, but a magic decorator is<BR>added, (maybe @ordered_kwargs or some such),<BR>and only for these kind of functions the new behavior applies.<BR>Also, given such a
 decorator, when given **d where d is a regular dict, the<BR>implementation could possibly throw an error. (Or maybe it is up to the<BR>implementor of the specific function).<BR><BR>Cheers,<BR>Imri<BR><BR><BR>-- <BR>Imri Goldberg<BR>--------------------------------------<BR><A href="http://plnnr.com/" target=_blank>http://plnnr.com/</A> - automatic trip planning<BR><A href="http://www.algorithm.co.il/blogs/" target=_blank>http://www.algorithm.co.il/blogs/</A><BR>--------------------------------------<BR>-- insert signature here ----<BR>-------------- next part --------------<BR>An HTML attachment was scrubbed...<BR>URL:<BR><<A href="http://mail.python.org/pipermail/python-ideas/attachments/20110120/0bf7be8a" target=_blank>http://mail.python.org/pipermail/python-ideas/attachments/20110120/0bf7be8a</A><BR>/attachment-0001.html><BR><BR>------------------------------<BR><BR>Message: 5<BR>Date: Thu, 20 Jan 2011 09:52:21 -0800<BR>From: geremy condra
 <<A href="mailto:debatem1@gmail.com" ymailto="mailto:debatem1@gmail.com">debatem1@gmail.com</A>><BR>To: Guido van Rossum <<A href="mailto:guido@python.org" ymailto="mailto:guido@python.org">guido@python.org</A>><BR>Cc: <A href="mailto:python-ideas@python.org" ymailto="mailto:python-ideas@python.org">python-ideas@python.org</A>, "M.-A. Lemburg" <<A href="mailto:mal@egenix.com" ymailto="mailto:mal@egenix.com">mal@egenix.com</A>><BR>Subject: Re: [Python-ideas] A sorted version of **kwargs<BR>Message-ID:<BR>    <<A href="mailto:AANLkTiky7RDpJzxfmBLvVSTFQdj0P1-D9Bs8wn4RH0G3@mail.gmail.com" ymailto="mailto:AANLkTiky7RDpJzxfmBLvVSTFQdj0P1-D9Bs8wn4RH0G3@mail.gmail.com">AANLkTiky7RDpJzxfmBLvVSTFQdj0P1-D9Bs8wn4RH0G3@mail.gmail.com</A>><BR>Content-Type: text/plain; charset=ISO-8859-1<BR><BR>On Thu, Jan 20, 2011 at 8:42 AM, Guido van Rossum <<A href="mailto:guido@python.org"
 ymailto="mailto:guido@python.org">guido@python.org</A>> wrote:<BR>> On Thu, Jan 20, 2011 at 6:05 AM, M.-A. Lemburg <<A href="mailto:mal@egenix.com" ymailto="mailto:mal@egenix.com">mal@egenix.com</A>> wrote:<BR>>> Nick Coghlan wrote:<BR>>>> On Thu, Jan 20, 2011 at 8:28 PM, Steven D'Aprano <<A href="mailto:steve@pearwood.info" ymailto="mailto:steve@pearwood.info">steve@pearwood.info</A>><BR>wrote:<BR>>>>> I would be +0 on making **kwargs an ordered dict automatically, and -1<BR>on<BR>>>>> adding ***ordered_kwargs. Because kwargs is mostly used only for<BR>argument<BR>>>>> passing, and generally with only a small number of items, it probably<BR>>>>> doesn't matter too much if it's slightly slower than an unordered dict.<BR>>>><BR>>>> Yeah, simply making the kwargs dict always ordered is likely the way<BR>>>> we would do it. That's also the only
 solution with any chance of<BR>>>> working by default with the way most decorators are structured<BR>>>> (accepting *args and **kwargs and passing them to the wrapped<BR>>>> function).<BR>>><BR>>> -1.<BR>>><BR>>> How often do you really need this ?<BR>>><BR>>> In which of those cases wouldn't a static code analysis give you<BR>>> the call order of the parameters already ??<BR>>><BR>>> "Nice to have" is not good enough to warrant a slow down of<BR>>> all function calls involving keyword arguments, adding overhead<BR>>> for other Python implementations and possibly causing problems<BR>>> with 3rd party extensions relying on getting a PyDict for the<BR>>> keyword arguments object.<BR>><BR>> What he says.<BR>><BR>> In addition, I wonder what the semantics would be if the caller passed<BR>> **d where d was an *unordered*
 dict...<BR><BR>Wouldn't this be a good argument for the original proposal? That there<BR>wouldn't be confusion about whether you were getting an odict or a<BR>dict with ***?<BR><BR>Also, would functions that didn't specify this behavior see an actual<BR>performance hit? I assumed that given the existence of METH_NOARGS and<BR>friends that there was some kind of optimization going on here, but I<BR>can't get it to turn up on timeit.<BR><BR>Geremy Condra<BR><BR><BR>------------------------------<BR><BR>_______________________________________________<BR>Python-ideas mailing list<BR><A href="mailto:Python-ideas@python.org" ymailto="mailto:Python-ideas@python.org">Python-ideas@python.org</A><BR><A href="http://mail.python.org/mailman/listinfo/python-ideas" target=_blank>http://mail.python.org/mailman/listinfo/python-ideas</A><BR><BR><BR>End of Python-ideas Digest, Vol 50, Issue
 34<BR>********************************************<BR><BR>__________________________________________________<BR>???????????????<BR><A href="http://cn.mail.yahoo.com/" target=_blank>http://cn.mail.yahoo.com</A><BR><BR><BR>------------------------------<BR><BR>_______________________________________________<BR>Python-ideas mailing list<BR><A href="mailto:Python-ideas@python.org" ymailto="mailto:Python-ideas@python.org">Python-ideas@python.org</A><BR><A href="http://mail.python.org/mailman/listinfo/python-ideas" target=_blank>http://mail.python.org/mailman/listinfo/python-ideas</A><BR><BR><BR>End of Python-ideas Digest, Vol 50, Issue 36<BR>********************************************<BR></DIV></DIV></div><br>






       </body></html>