On Tue, Mar 19, 2013 at 12:50 AM, Neal Becker <ndbeck...@gmail.com> wrote: > def F(x): > return x > > x = 2 > F(x) = 3 > > F(x) = 3 > SyntaxError: can't assign to function call > > Do we really need this restriction? There do exist other languages without > it.
The languages that permit you to assign to a function call all have some notion of a reference type. In C++, for instance, you can return a reference to an object, and assigning to the function call achieves the same thing as assigning to the referent. C has similar semantics with pointers; you can dereference a returned pointer: int somevalue; int *F() {return &somevalue;} *F() = 5; /* will assign to somevalue */ With Python, there are no pointers, there are no variables. But you can do something somewhat similar: >>> x = [0] >>> def F(): return x >>> F()[0]=3; >>> x[0] 3 If you think of x as a pointer to the value x[0], then Python lets you "dereference" the function return value. But this is fiddling with terminology; the concept of assigning to a function return value doesn't really make sense in Python. Further discussion on exactly _why_ this is the case can be found on python-list's or python-tutor's archives, such as this excellent post by Steven D'Aprano: http://mail.python.org/pipermail/tutor/2010-December/080505.html TLDR: Python != C. :) ChrisA _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com