On Fri, Jul 21, 2017 at 10:19 AM, Brett Cannon <brett@python.org> wrote:
On Fri, 21 Jul 2017 at 10:08 Jason H <jhihn@gmx.com> wrote:
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.

There are basically two assignment operators, based on context, = and :
a = 1
{ a: 1 }

The `=` isn't an assignment operator, it's a *binding*.  The name 'a' gets bound to the integer object "1" in your example.  Don't confuse this with a language like C where it really is an assignment.  If I later write:

    a = 2

I haven't changed the "cell" that contains the integer object, I've rebound the NAME `a` to a different object.

But you've left out quite a few binding operations.  I might forget some, but here are several:

    import a   # bind the name `a` to a module object
 
    with open(fname) as a: pass   # bind the name `a` to a file handle

    for a in [1]: pass   # bind the name `a` to each of the objects in an iterable
    # ... In this case, the net result is identical to `a=1`

    def a(): pass    # bind the name `a` to a function object defined in the body

    class a: pass   # bind the name `a` to a class object defined in the body
 
With a bit of circuitous code, you *can* use a dictionary to bind a variable too:

    >>> globals().update({'a':1})
    >>> a
    1

--
Keeping medicines from the bloodstreams of the sick; food
from the bellies of the hungry; books from the hands of the
uneducated; technology from the underdeveloped; and putting
advocates of freedom in prisons.  Intellectual property is
to the 21st century what the slave trade was to the 16th.