Gwenlliana added the comment: The capture actually worked correctly. It seems to be caused by the artifacts introduced by the evaluation function decorators.
Decorator lists for functions are compiled to a series of high-order function applications to the original function, followed by an assignment which stores the resulting function object to the name of the original function. A decompilation of the sample code might be something like this: 3 0 LOAD_CONST 0 (<code object outer at ...>) 3 MAKE_FUNCTION 0 6 STORE_NAME 0 (outer) 10 9 LOAD_NAME 0 (outer) 12 LOAD_CONST 1 (<code object f ...>) 15 MAKE_FUNCTION 0 18 CALL_FUNCTION 1 21 STORE_NAME 1 (f) 24 LOAD_CONST 2 (None) 27 RETURN_VALUE It works in the same way with `f = outer(lambda: None)`. Thus evaluating `f.__name__` or `f.func_name` would actually gives the __name__ property of that inner function object, thus `help(f)` actually queries the help information of function inner. Similarly, lots of properties of the original function object f would be shadowed by the decoration process, including the __doc__ property. You'll find documenting f takes no effect on the value of `f.__doc__`: @outer def f(): """ The docstring of function f """ return >>> help(f) Help on function inner in module tmp: inner() #comment ---------- nosy: +Gwenlliana _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue23217> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com