> There are *NO* semantic advantages for named vs unnamed functions in Python.
I feel that this conversation has glanced off the point. Let me try a new approach: There is the Pythonic way (whatever that is), and then The Lisp Way. I don't know what the former is, but it has something to do with indentation, and the (meaningless to me*) phrase "It fits your mind." The Lisp way is quite specific: Pure Compositionality. Compositionality encompasses and defines all aspects of Lisp, from the parens to functional style to fundamental recursion to lambda, and even the language itself is classically composed from the bottom up, and compositionality enables us to create new complete languages nearly trivially. How this concept plays into the current conversation is not subtle: LAMBDA forms server to directly modify the forms in which they appear. SORT is the example that comes to mind for me. If one says: (sort ... #'(lambda (a b) ...)) [I realize that the #' is optional, I use it here for emphasis that there is a function being formed.] the lambda form composes, with sort, a new type of sort -- a sort of type <whatever the lambda function does>. Thus, the semantics of this form are localized to the sort expression, and do not leave it -- they are, indeed, conceptually a part of the sort expression, and to require it/them to be moved outside and given a name breaks the conceptual compositionality -- that is, the compositional locality of the form. Similarly, parens and the functional fact that every form returns a value provide compositional locality and, perhaps more importantly in practice, compositional *mobility* -- so that, pretty much anywhere in Lisp where you need an argument, you can pick up a form and drop it in. [Macros often break this principle, I'll get to those in a moment.] This is something that no other language (except some dead ones, like APL) were able to do, and these provide incredible conceptual flexibility -- again, I'll use the term "mobility" -- one can, in most cases, literally move code as though it were a closed concept to anywhere that that concept is needed. Macros, as I have said, bear a complex relationship to this concept of composition mobility and flexibility. The iteration macro, demonstrated elsewhere in this thread, is an excellent example. But macros are more subtly related to compositionality, and to the present specific question, because, as you yourself said: All you need to do is make up a name that isn't used....But how is one to find a name that isn't used if one has macros? [Actually, in Lisp, even if we didn't have lambda we could do this by code walking, but I'll leave that aside, because Python can't do that, nor can it do macros.] I do not hesitate to predict that Python will someday sooner than later recognize the value of compositional flexibility and mobility, and that it will struggle against parentheses and lambdas, but that in the end it will become Lisp again. They all do, or die. === [*] BA - Biographical Annotation: Yeah, I've programmed all those things too for years and years and years. I also have a PhD in cognitive psychology from CMU, where I worked on how people learn complex skills, and specifically programming. When I say that "fits your brain" is meaningless to me, I mean that in a technical sense: If it had any meaning, I, of all people, would know what it means; meaning that I know that it doesn't mean anything at all. -- http://mail.python.org/mailman/listinfo/python-list