<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Fri, 21 Jul 2017 at 10:08 Jason H <<a href="mailto:jhihn@gmx.com">jhihn@gmx.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I experimented with Python in college and I've been for close to 20 years now. (Coming and going as needed) I love the language. But there is one annoyance that I continually run into.<br>
<br>
There are basically two assignment operators, based on context, = and :<br>
a = 1<br>
{ a: 1 }<br></blockquote><div><br></div><div>So the latter is not an assignment. `=` is an assignment as it creates a new entry in a namespace, while the later just associates a key with a value in a dictionary.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
They cannot be used interchangeably:<br>
a: 1 # error<br>
{a=1} # error<br>
<br>
I don't think I should be this way.<br></blockquote><div><br></div><div>But it's on purpose as they do different things. Thanks for sharing the idea but I don't see this changing.<br><br></div><div>-Brett<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
There are times when I have a bunch of variables that I want to collect into an object or destructure. This involves adding commas, and swapping the :/=. I don't have a good fix for  the adding of commas (maybe a newline?)<br>
but I think : should at least be accepted as = everywhere except in ifs:<br>
a: 1 # same as a = 1<br>
<br>
One area where it might help (although the python parser already catches it) is in ifs:<br>
if a:1 # always error ?<br>
if a=1 # currently error, but might be accepted shorthand for == ?<br>
<br>
Ideally, I could take<br>
a: 1<br>
b: 2<br>
then in 3 edits:<br>
1. first line prepend 'x: {'<br>
2. last line append '}'<br>
3. indent between { }<br>
<br>
I guess his would imply that { open up an assignment scope, where newlines are commas if the last line did not end with an operator or the next line did not start with an operator:<br>
x: {<br>
  a: x -  # - operator<br>
    f(x)<br>
  b:      # : operator<br>
    5487234728394720348988734574357<br>
  c: 7    # c is 13, no trailing operator but next line has a preceding operator<br>
    + 6<br>
}<br>
<br>
The only issue then is how do we address a?<br>
x.a    # looks fine to me<br>
x['a'] # as a dict, but the conversion of a to string 'a' could be confusing.<br>
<br>
<br>
Additionally, I was also thinking about : as an implied await:<br>
a = await f() # await generator<br>
a: f()        # await generator, or direct assignment if return type is not a generator/async func<br>
<br>
Thoughts? Please be gentle :-)<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" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/python-ideas</a><br>
Code of Conduct: <a href="http://python.org/psf/codeofconduct/" rel="noreferrer" target="_blank">http://python.org/psf/codeofconduct/</a><br>
</blockquote></div></div>