On 8/3/2010 8:48 AM, Antoine Pitrou wrote:
On Tue, 3 Aug 2010 22:25:01 +1000
Nick Coghlan<ncogh...@gmail.com> wrote:
On Tue, Aug 3, 2010 at 1:40 PM, Eli Bendersky<eli...@gmail.com> wrote:
The first print out correctly specifies the line "def foo" is in. However,
the second one points to the line with "@dummydecorator" instead of "def
bar". [Python 2.6]
The side-effects of this behavior can be easily seen in the output of
modules like trace and profile. Would you say it's normal, or could this be
considered a bug?
Since the decorator is as much a part of the function definition as
the def line is, I would say that it is correct (the name says
"firstlineno", not "deflineno").
That's debatable. Since writing:
@b
def a():
...
is equivalent to:
def a():
...
a = b(a)
The difference is that 'a=b(a)' is a standalone statement which could
moved down with other statements interposed, while '@b' is neither a
statement nor expression but a def statement prefix, and is documented
as such.
A dynamic difference between the constructs, as least with CPython, is
that the decorator form does just one namespace binding instead of two.
and in the latter case co_firstlineno points to the "def a()" line.
Furthermore, co_firstlineno is an attribute of the code object, not the
function object, so it shouldn't ideally depend on whether a decorator
was applied or not.
Perhaps. A practical consideration is that it is easier to search
forward from the first '@' line to the 'def' line than the reverse.
--
Terry Jan Reedy
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com