<div dir="ltr">Nope, I retract what I said.<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Apr 15, 2014 at 3:02 PM, Andrew Barnert <span dir="ltr"><<a href="mailto:abarnert@yahoo.com" target="_blank">abarnert@yahoo.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><div class=""><div>On Apr 15, 2014, at 10:24, "Franklin? Lee" <<a href="mailto:leewangzhong+python@gmail.com" target="_blank">leewangzhong+python@gmail.com</a>> wrote:</div>

<div><br></div><blockquote type="cite"><div><div dir="ltr"><div>I think C Anthony is saying that he tried to make it happen, and it didn't, but he figured something else out, which is what is relevant to him here.<br>

</div></div></div></blockquote><div><br></div></div><div>What's the something else?</div><div><br></div><div>It seems to me he was asking why hacking dict literals doesn't work (either from an implementation point of view or from a language design point of view) because he _hadn't_ figured it out. And that's what Chris Angelico answered (from both points of view).</div>

<div><div class="h5"><div><br></div><blockquote type="cite"><div><div dir="ltr">I am mostly sure he isn't arguing for the ability to hack dict literals</div></div></blockquote><br><blockquote type="cite"><div><div dir="ltr">



</div><div class="gmail_extra"><div class="gmail_quote">On Tue, Apr 15, 2014 at 6:40 AM, Chris Angelico <span dir="ltr"><<a href="mailto:rosuav@gmail.com" target="_blank">rosuav@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>On Tue, Apr 15, 2014 at 8:11 PM, C Anthony Risinger <<a href="mailto:anthony@xtfx.me" target="_blank">anthony@xtfx.me</a>> wrote:<br>




> This not working is unexpected, if considering the expectation literals:<br>
><br>
> {..} and [...]<br>
><br>
> ...translate to:<br>
><br>
> dict(...) and list(...) [int(..) and str(..)]<br>
><br>
> Why isn't/can't this be true?<br>
<br>
</div>They don't. They translate into dict-creation bytecodes. In CPython:<br>
<br>
Python 3.5.0a0 (default:6a0def54c63d, Mar 26 2014, 01:11:09)<br>
[GCC 4.7.2] on linux<br>
Type "help", "copyright", "credits" or "license" for more information.<br>
>>> import dis<br>
>>> def make_dict1():<br>
...     return {'hello':1, 'world':2}<br>
...<br>
>>> def make_dict2():<br>
...     return dict(hello=1, world=2)<br>
...<br>
>>> dis.dis(make_dict1)<br>
  2           0 BUILD_MAP                2<br>
              3 LOAD_CONST               1 (1)<br>
              6 LOAD_CONST               2 ('hello')<br>
              9 STORE_MAP<br>
             10 LOAD_CONST               3 (2)<br>
             13 LOAD_CONST               4 ('world')<br>
             16 STORE_MAP<br>
             17 RETURN_VALUE<br>
>>> dis.dis(make_dict2)<br>
  2           0 LOAD_GLOBAL              0 (dict)<br>
              3 LOAD_CONST               1 ('hello')<br>
              6 LOAD_CONST               2 (1)<br>
              9 LOAD_CONST               3 ('world')<br>
             12 LOAD_CONST               4 (2)<br>
             15 CALL_FUNCTION          512 (0 positional, 2 keyword pair)<br>
             18 RETURN_VALUE<br>
<br>
If you want the name dict to be looked up, look up the name dict.<br>
Otherwise, code like this would be very VERY confusing:<br>
<br>
>>> def make_dict3():<br>
...     dict = {'hello':1, 'world':2}<br>
...     return dict<br>
...<br>
>>> dis.dis(make_dict3)<br>
  2           0 BUILD_MAP                2<br>
              3 LOAD_CONST               1 (1)<br>
              6 LOAD_CONST               2 ('hello')<br>
              9 STORE_MAP<br>
             10 LOAD_CONST               3 (2)<br>
             13 LOAD_CONST               4 ('world')<br>
             16 STORE_MAP<br>
             17 STORE_FAST               0 (dict)<br>
<br>
  3          20 LOAD_FAST                0 (dict)<br>
             23 RETURN_VALUE<br>
<br>
If that had to actually call dict(), it would raise UnboundLocalError<br>
for something that doesn't seem to reference locals before assigning<br>
to them. As it is, it's exactly the same as make_dict1 except that it<br>
does a store/load unnecessarily.<br>
<br>
ChrisA<br>
_______________________________________________<br>
Python-ideas mailing list<br>
<a href="mailto:Python-ideas@python.org" target="_blank">Python-ideas@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-ideas" target="_blank">https://mail.python.org/mailman/listinfo/python-ideas</a><br>
Code of Conduct: <a href="http://python.org/psf/codeofconduct/" target="_blank">http://python.org/psf/codeofconduct/</a><br>
</blockquote></div><br></div>
</div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>Python-ideas mailing list</span><br><span><a href="mailto:Python-ideas@python.org" target="_blank">Python-ideas@python.org</a></span><br>

<span><a href="https://mail.python.org/mailman/listinfo/python-ideas" target="_blank">https://mail.python.org/mailman/listinfo/python-ideas</a></span><br><span>Code of Conduct: <a href="http://python.org/psf/codeofconduct/" target="_blank">http://python.org/psf/codeofconduct/</a></span></div>

</blockquote></div></div></div></blockquote></div><br></div>