Return value of an assignment statement?

Steve Holden steve at holdenweb.com
Fri Feb 22 11:21:51 EST 2008


Marc 'BlackJack' Rintsch wrote:
> On Fri, 22 Feb 2008 12:32:10 +0000, Steven D'Aprano wrote:
> 
>> On Fri, 22 Feb 2008 08:12:56 +0000, Marc 'BlackJack' Rintsch wrote:
>>
>>> A "variable" in programming languages is composed of a name, a memory
>>> location, possibly a type and a value. In C-like languages, where you
>>> put values in named and typed "boxes", the memory location and type are
>>> attached to the name.  In Python both belong to the value.
>> But Python objects don't have names, so by your own definition, they
>> aren't variables.
> 
> Exactly!  Names aren't variables.  The unit of a name, an address, and a
> value are a variable.
> 
>> Names are associated with namespaces, not objects. A name must have one
>> and only one object bound to it at any one time;
> 
> What is a binding when it's not an association between a name and an
> object!?  So names are associated with objects.  There are no names
> without objects in Python.  If a name is not bound to any object, how could
> the name exist?  That would be like a dangling pointer, a beast that
> doesn't exists in Python.
> 
> <nitpick>Okay there are local names that are known and therefore somehow
> "exist" before they get bound, but that's IMHO an implementation
> detail.<nitpick>
> 
>> objects on the other hand can be bound to one name, or no name, or a
>> thousand names. The object itself has no way of knowing what names it is
>> bound to, if any.
>>
>> Or, to put it another way... Python doesn't have variables.
> 
> It has.  You just can't substitute the term "name" with "variable" and
> expect it to behave like in C.  A variable is not just the name but also
> the value and the storage space and how those are connected.
> 
"Does" ... "Doesn't" ... "Does so!".

You guys are merely arguing about what you want to call the Python 
assignment semantics you both understand perfectly well. This isn't 
going to help anyone.

The fact of the matter is that when a Python name is bound to a value 
the value is normally created in heap storage (with a few exceptions 
like the pre-allocated objects such as None and the small integers, but 
*never* directly in the namespace in which the name is being bound), and 
the name is associated with a reference to the value.

I've said before that Python names are very similar to automatically 
dereferenced pointer variables, and I suppose the same old arguments 
will be trotted out against that utterance now I've said it again.

But for the purposes of comprehension, particularly by C and C++ 
programmers who haven't come across this particular semantic before it 
should server to aid comprehension. The fact that objects exist 
independent of the dynamically created scopes of function calls and the 
like is precisely what stops Python from suffering the same out-of-scope 
(dangling) pointer issues that C++ is famous for.

The fact remains that name binding in Python (and binding to container 
items too) doesn't "return a value", and bindings were deliberately not 
allowed as a term in a broader expression to avoid some common 
programming errors.

regards
  Steve
-- 
Steve Holden        +1 571 484 6266   +1 800 494 3119
Holden Web LLC              http://www.holdenweb.com/




More information about the Python-list mailing list