[Python-ideas] Ruby-style Blocks in Python Idea
Steven D'Aprano
steve at pearwood.info
Wed Mar 11 13:03:58 CET 2009
On Wed, 11 Mar 2009 11:01:41 am average wrote:
> These kind of [Anonymous] functions/code blocks explicitly tell the
> user that "This is NOT part of my program"
I'm a user, and they don't tell me any such thing.
By the way, that word, "explicitly" -- I think you are
using "explicitly" as if it actually meant "implicitly". If the
function were to explicitly tell the user, it would look something like
this:
caller( function_that_is_not_part_of_the_program x: x+1 )
which of course is ridiculously verbose. What you say might be true if
lambda had that extended meaning, but it doesn't. In Python, lambda
merely means "create a nameless function object from a single
expression".
It's also nonsense, because there the function is, inside the program as
clear as day. Arguing that a function that appears inside your program
is not part of your program is rather like saying that your stomach is
not part of your body.
Perhaps what you are getting at is that anonymous functions blur the
difference between code and data, and that if you consider them as
data, then they are outside the program in some sense? That's not
entirely unreasonable: it's common to distinguish between code and
data, even though fundamentally they're all just bits and, really, the
distinction is all in our mind. (That doesn't mean the distinction
isn't important.)
But even accepting that an anonymous function used as data is outside of
the program in some sense, anonymity is strictly irrelevant. If you
consider the lambda function here:
caller(lambda x: x+1)
to be data, then so is the named function foo here:
def foo(x):
return x+1
caller(foo)
[...]
> gibberish?
I'm trying to give you the benefit of the doubt.
--
Steven D'Aprano
More information about the Python-ideas
mailing list