<div dir="ltr">Hmmm... I admit I didn't expect quite this behavior. I'm don't actually understand why it's doing what it does.<br><br><div><font face="monospace, monospace">>>> def myfun():</font></div><div><font face="monospace, monospace">...    print(globals().update({'foo', 43}), foo)</font></div><div><font face="monospace, monospace">...</font></div><div><font face="monospace, monospace">>>> myfun()</font></div><div><font face="monospace, monospace">Traceback (most recent call last):</font></div><div><font face="monospace, monospace">  File "<stdin>", line 1, in <module></font></div><div><font face="monospace, monospace">  File "<stdin>", line 2, in myfun</font></div><div><font face="monospace, monospace">TypeError: cannot convert dictionary update sequence element #0 to a sequence</font></div><div><br></div>That said, this is a silly game either way.  And even though you CAN (sometimes) bind in an expression pre-572, that's one of those perverse corners that one shouldn't actually use.<div><br><div class="gmail_quote"><div dir="ltr">On Wed, Jul 4, 2018 at 9:58 AM Chris Angelico <<a href="mailto:rosuav@gmail.com">rosuav@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Wed, Jul 4, 2018 at 11:52 PM, David Mertz <<a href="mailto:mertz@gnosis.cx" target="_blank">mertz@gnosis.cx</a>> wrote:<br>
> On Wed, Jul 4, 2018 at 3:02 AM Chris Angelico <<a href="mailto:rosuav@gmail.com" target="_blank">rosuav@gmail.com</a>> wrote:<br>
>><br>
>> "Assignment is a statement" -- that's exactly the point under discussion.<br>
>> "del is a statement" -- yes, granted<br>
>> "function and class declarations are statements" -- class, yes, but<br>
>> you have "def" and "lambda" as statement and expression equivalents.<br>
>> "import is a statement" -- but importlib.import_module exists for a reason<br>
>><br>
>> I'm going to assume that your term "mutating" there was simply a<br>
>> miswording, and that you're actually talking about *name binding*,<br>
>> which hitherto occurs only in statements. Yes, this is true.<br>
><br>
><br>
> Nope, not actually:<br>
><br>
>>>> del foo<br>
>>>> print(globals().update({'foo':42}), foo)<br>
> None 42<br>
><br>
<br>
Try it inside a function though.<br>
<br>
ChrisA<br>
_______________________________________________<br>
Python-Dev mailing list<br>
<a href="mailto:Python-Dev@python.org" target="_blank">Python-Dev@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-dev" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/python-dev</a><br>
Unsubscribe: <a href="https://mail.python.org/mailman/options/python-dev/mertz%40gnosis.cx" rel="noreferrer" target="_blank">https://mail.python.org/mailman/options/python-dev/mertz%40gnosis.cx</a><br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature">Keeping medicines from the bloodstreams of the sick; food <br>from the bellies of the hungry; books from the hands of the <br>uneducated; technology from the underdeveloped; and putting <br>advocates of freedom in prisons.  Intellectual property is<br>to the 21st century what the slave trade was to the 16th.<br></div></div></div>