On Sun, 23 Mar 2008 22:36:35 -0400, Roy Smith wrote: >> > I've also done two things. First, I've created a function object >> > (i.e. a lambda body), and I've also bound the name torture to that >> > function object, in much the same way I did with the list. But, it's >> > different. The function object KNOWS that it's name is torture. >> >> No it does not. Function objects don't know their name. All they know >> is that they have a label attached to them that is useful to use as a >> name in some contexts, e.g. when printing tracebacks. It's just a >> label, nothing more. > > I think we're arguing the same thing. When you write > > def foo(): > whatever > > you create an object which contains the string "foo", retrievable > through its __name__ attribute. That's what I meant by "it knows its > name"
But that's not true. Firstly, you can't access the __name__ attribute unless you already have a reference to the object (not necessarily a name), so clearly the __name__ attribute isn't how you retrieve objects. Secondly, the __name__ attribute has no special purpose. It's not even used for tracebacks. >>> def foo(): ... return "result" ... >>> foo.__name__ = "something" >>> something() Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'something' is not defined >>> >>> something = foo >>> something() 'result' >>> something(None) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: foo() takes no arguments (1 given) >>> something.__name__ 'something' -- Steven -- http://mail.python.org/mailman/listinfo/python-list