Thanks for tracing this Tom. I was meaning to look into it but never got
round to it.

Jens

tor. 14. maj 2015 kl. 03.30 skrev Juan Nunez-Iglesias <jni.s...@gmail.com>:

> Thanks Tom! Absolutely fascinating! I was trying to grok this and
> thinking, "but what if we want 'or' to return a value that will later be
> used as a conditional, surely it should return bool?" But of course
> whatever it returns will be correctly interpreted as a bool in a
> conditional context! Delayed/lazy bool casting, in a sense. Very clever
> indeed.
>
> There's quite a few places where this would make my code quite a bit
> cleaner! =)
>
> Thanks again!
>
> Juan.
>
> On Thu, May 14, 2015 at 12:21 PM, Thomas Caswell <tcasw...@gmail.com>
> wrote:
>
>> The `a or b` syntax evaluates if a is 'trueish' and if so returns a if
>> not returns b so `c = None or {}` -> c == {}  but `c = {'a': 1} or {}` -> c
>> == {'a': 1}
>>
>> See
>> https://docs.python.org/3.5/reference/expressions.html#grammar-token-or_test
>> for the docs on or. and works almost the same, but returns a if a is False
>> and b in a is True.
>>
>> In the grammar for calls it should be looking for thing like "'**'
>> expression" which means in the parsing anything that is part of the
>> expression gets evaluated before the unpacking of the mapping.  If you
>> chase far enough back in the grammar an 'or_test' is an 'expression' (I may
>> be butchering the terminology here, only just learned how lexing/parsing
>> works a few weeks ago) so it should be fully evaluated before trying to
>> unpack.
>>
>> See https://docs.python.org/3.5/reference/expressions.html#calls for the
>> official docs.
>>
>> I suspect the source of this bug is that the grammar is getting
>> rearranged a bit to allow for things like d = {**other_dict, 'x':6}  and b
>> = (*a, *c) to work as expected and something did not get changed quite
>> right.
>>
>> Tom
>>
>> On Wed, May 13, 2015 at 8:33 PM Juan Nunez-Iglesias <jni.s...@gmail.com>
>> wrote:
>>
>>> Fascinating! Can you "unpack" (heh) that error for us mere mortals? In
>>> particular:
>>>
>>> - never seen that "or" syntax before... Is it coercing both expressions
>>> as bool, or is it evaluating to left if bool(left) evaluates to True, else
>>> to right?
>>> - Why do you expect the second expression to work? Is ** supposed to
>>> have lower preference than "or"? (Which seems weird to me.)
>>>
>>> Thanks!
>>>
>>> Juan.
>>>
>>> On Thu, May 14, 2015 at 5:08 AM, Thomas Caswell <tcasw...@gmail.com>
>>> wrote:
>>>
>>>>
>>>> The failures on python nightly are currently due to a bug in python (
>>>> http://bugs.python.org/issue24176)
>>>>
>>>> Tom
>>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>>> One dashboard for servers and applications across Physical-Virtual-Cloud
>>>> Widest out-of-the-box monitoring support with 50+ applications
>>>> Performance metrics, stats and reports that give you Actionable Insights
>>>> Deep dive visibility with transaction tracing using APM Insight.
>>>> http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
>>>> _______________________________________________
>>>> Matplotlib-devel mailing list
>>>> Matplotlib-devel@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/matplotlib-devel
>>>>
>>>>
>>>
>>> ------------------------------------------------------------------------------
>>> One dashboard for servers and applications across Physical-Virtual-Cloud
>>> Widest out-of-the-box monitoring support with 50+ applications
>>> Performance metrics, stats and reports that give you Actionable Insights
>>> Deep dive visibility with transaction tracing using APM Insight.
>>> http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
>>> _______________________________________________
>>> Matplotlib-devel mailing list
>>> Matplotlib-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/matplotlib-devel
>>>
>>
>
> ------------------------------------------------------------------------------
> One dashboard for servers and applications across Physical-Virtual-Cloud
> Widest out-of-the-box monitoring support with 50+ applications
> Performance metrics, stats and reports that give you Actionable Insights
> Deep dive visibility with transaction tracing using APM Insight.
> http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
> _______________________________________________
> Matplotlib-devel mailing list
> Matplotlib-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matplotlib-devel
>
------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud 
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Reply via email to