Bryan Olson <[EMAIL PROTECTED]> writes: > How anonymous is that function when we can see that its name is 'h'?
h is out of scope after compose returns, so the function is anonymous in the sense that there is no symbol bound to the function, through which you can refer to it. > import math > > f = compose(math.sin, math.cos) > print f.__name__ I prefer to think of __name__ as just some debugging info stuck inside the closure, though actually Python is introspective enough to be able to let you locate and call a function whose __name__ is "h". Of course there might be more than one: f = compose(math.sin, math.cos) g = compose(math.sqrt, math.tan) print f.__name__, g.__name__ > Nevertheless, def is never a real anonymous function constructor. Well, def constructs a function with a name, but the function can stay around after the name goes away, after which I'd say the function is nameless. One could otherwise say that (lambda x: x+x) is not anonymous either, since id(lambda ...) is a unique label stuck to it like a __name__. > If our concern is Python's suitability for studying principles of > programming, I think I'm on stronger ground. Python is great for > getting things done. It is easy to learn in the sense of learning > to to use if for practical tasks. Python's actual semantics are not > as neat and clean as some other languages. Fair enough. -- http://mail.python.org/mailman/listinfo/python-list