<div dir="ltr"><div class="gmail_default" style="font-family:monospace,monospace"><span style="font-family:arial,sans-serif">On Tue, Oct 10, 2017 at 5:01 PM, Nick Coghlan </span><span dir="ltr" style="font-family:arial,sans-serif"><<a href="mailto:ncoghlan@gmail.com" target="_blank">ncoghlan@gmail.com</a>></span><span style="font-family:arial,sans-serif"> wrote:</span><br></div><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class="">On 10 October 2017 at 22:51, Koos Zevenhoven <span dir="ltr"><<a href="mailto:k7hoven@gmail.com" target="_blank">k7hoven@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><span class="m_2404870989613394404gmail-"></span><div class="gmail_extra"><div style="font-family:monospace,monospace">​I see no reason why these two should be equivalent.</div></div></div></blockquote><div><br></div></span>There is no "should" about it: it's a brute fact that the two forms *are* currently equivalent for lazy iterators (including generators), and both different from the form that uses eager evaluation of the values before the context change.</div><div class="gmail_quote"><br></div><div class="gmail_quote">Where should enters into the picture is by way of PEP 550 saying that they should *remain* equivalent because we don't have an adequately compelling justification for changing the runtime semantics.</div><div class="gmail_quote"><br></div><div class="gmail_quote">That is, given the following code:</div><div class="gmail_quote"><br></div><div class="gmail_quote"><span class="m_2404870989613394404gmail-im">    itr = make_iter()<span class=""><br><div class="gmail_quote">    with decimal.localcontext() as ctx:</div><div class="gmail_quote">        ctc.prex = 30<br></div></span><span class="m_2404870989613394404gmail-m_-2088292188506436253gmail-">        for i in itr:<br>
          pass</span></span></div><div class="gmail_quote"><span class="m_2404870989613394404gmail-im"><span class="m_2404870989613394404gmail-m_-2088292188506436253gmail-"><br></span></span></div><div class="gmail_quote"><span class="m_2404870989613394404gmail-im"><span class="m_2404870989613394404gmail-m_-2088292188506436253gmail-">Right now, today, in 3.6. the calculations in the iterator will use the modified decimal context, *not* the context that applied when the iterator was created. If you want to ensure that isn't the case, you have to force eager evaluation before the context change.<br></span></span></div><div class="gmail_quote"><span class="m_2404870989613394404gmail-im"><span class="m_2404870989613394404gmail-m_-2088292188506436253gmail-"><br></span></span></div><div class="gmail_quote"><span class="m_2404870989613394404gmail-im"><span class="m_2404870989613394404gmail-m_-2088292188506436253gmail-">What PEP 550 is proposing is that, by default, *nothing changes*: the lazy iteration in the above will continue to use the updated decimal context by default.</span></span></div></div></div></blockquote><div><br></div><div><div class="gmail_default" style="font-family:monospace,monospace">​That's just an arbitrary example. There are many things that *would* change if decimal contexts simply switched from using thread-local storage to using PEP 550. It's not at all obvious which of the changes would be most likely to cause problems. If I were to choose, I would probably introduce a new context manager which works with PEP 555 semantics, because that's the only way to ensure full backwards compatibility, regardless of whether PEP 555 or PEP 550 is used. But I'm sure one could decide otherwise.</div></div><div><div class="gmail_default" style="font-family:monospace,monospace"><br></div></div><div class="gmail_default" style="font-family:monospace,monospace"><br></div></div><div class="gmail_default" style="font-family:monospace,monospace">​––Koos​</div><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">+ Koos Zevenhoven + <a href="http://twitter.com/k7hoven" target="_blank">http://twitter.com/k7hoven</a> +</div>
</div></div>