On 03/14/2015 12:51 PM, Chris Angelico wrote:
On Sun, Mar 15, 2015 at 3:33 AM, Rustom Mody <rustompm...@gmail.com> wrote:
As best as I can see python makes no distinction between such a foo and
the more usual function/methods that have no returns.
You can I can talk about these and distinguish them
Python has no clue about it.

But what support is actually needed? Look, I can write functions that
return values:

def square(x):
     return x*x

four = square(2)

and functions that don't:

def save_to_file(fn):
     with open(fn, "w") as f:
         f.write(stuff)
         f.write(more_stuff)

save_to_file("/tmp/asdf")

Who cares that the second one actually returns None and then ignores
that? It's not returning anything, it's not using the function return
value. This is, in effect, a procedure.

How is Python worse off for doing things this way rather than having a
true "function with no return value" or "procedure" concept?


And in C (at least the 80x86 implementations that I used) returns a value from a void function as well. The value is an undefined int value, whatever the AX (EAX) register happened to contain. The check that you didn't use such a value is made at compile time.

Further, in the original C definition, if you didn't define a return value, it was assumed to be int. And if you didn't define the arguments, they were assumed to be right. In the "C calling convention," the caller was responsible for popping off the arguments, since the called function didn't necessarily have a clue how many there were. Then later, for "efficiency reasons," they came up with the "Pascal calling convention," where the callee popped the arguments. It perhaps was related to the fact that the 80x86 instruction set had the "return N" instruction which decremented the call stack pointer an additional amount, at the same time as doing the return.

I think the Python convention is exactly right for its other characteristics. No declarations, no distinction.

--
DaveA
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to