On Sunday, November 17, 2013 2:24:19 PM UTC-5, John Ladasky wrote: > Hi, folks, > > Here's a minimal Python 3.3.2 code example, and its output: > > ================================================= > > def foo(): > pass > > print(foo) > bar = foo > print(bar) > > ================================================= > > <function foo at 0x7fe06e690c20> > <function foo at 0x7fe06e690c20> > > ================================================= > > Obviously, Python knows that in my source code, the name that was bound to > the function I defined was "foo". The print function even returns me the > name "foo" when I bind a new name, "bar", to the same function. This is > useful information that I would like to obtain directly, rather than having > to extract it from the output of the print statement. How can I do this? > Thanks.
Functions have a __name__ attribute, which is the name they were defined as: >>> def foo(): pass ... >>> foo.__name__ 'foo' >>> bar = foo >>> bar.__name__ 'foo' Like many statements in Python, the def statement is really performing an assignment, almost as if it worked like this: foo = function_thing(name="foo", code=......) The function object itself has a name, and is also assigned to that name, but the two can diverge by reassigning the function to a new name. --Ned. -- https://mail.python.org/mailman/listinfo/python-list