
To deal with specifically adding a new value to a returned tuple, you could write your function calls to truncate the tuple to the expected length, e.g. def myfunc(): ... return (result1, result2, newresult) x,y = myfunc()[2] x,y,z = myfunc()[3] So you would have to change all the relevant function calls, but only once. More generally, perhaps you could return a dictionary. Although this makes the function calls a bit more awkward: results = myfunc() x, y = results['result1'], results['result2'] Best wishes Rob Cliffe On 13/01/2011 14:30, Luc Goossens wrote:
Hi all,
There's a striking asymmetry between the wonderful flexibility in passing values into functions (positional args, keyword args, default values, *args, **kwargs, ...) and the limited options for processing the return values (assignment). Hence, whenever I upgrade a function with a new keyword arg and a default value, I do not have to change any of the existing calls, whereas whenever I add a new element to its output tuple, I find myself chasing all existing code to upgrade the corresponding assignments with an additional (unused) variable. So I was wondering whether this was ever discussed before (and recorded) inside the Python community. (naively what seems to be missing is the ability to use the assignment machinery that binds functions' formal params to the given actual param list also in the context of a return value assignment)
cheers, Luc _______________________________________________ Python-ideas mailing list Python-ideas@python.org http://mail.python.org/mailman/listinfo/python-ideas