Serhiy Storchaka <storchaka+cpyt...@gmail.com> added the comment:

This is because the first line of the function definition was the line of the 
last decorator in 3.7, and it is the line of the first decorator in 3.8.

$ rlwrap ./python -m dis

@decorator
@decorator
@decorator
def func():
    pass

In 3.7:

  2           0 LOAD_NAME                0 (decorator)

  3           2 LOAD_NAME                0 (decorator)

  4           4 LOAD_NAME                0 (decorator)
              6 LOAD_CONST               0 (<code object func at 
0x7f53a8281c40, file "<stdin>", line 2>)
              8 LOAD_CONST               1 ('func')
             10 MAKE_FUNCTION            0
             12 CALL_FUNCTION            1
             14 CALL_FUNCTION            1
             16 CALL_FUNCTION            1
             18 STORE_NAME               1 (func)
             20 LOAD_CONST               2 (None)
             22 RETURN_VALUE

In 3.8:

  2           0 LOAD_NAME                0 (decorator)

  3           2 LOAD_NAME                0 (decorator)

  4           4 LOAD_NAME                0 (decorator)

  2           6 LOAD_CONST               0 (<code object func at 
0x7f7045a80100, file "<stdin>", line 2>)
              8 LOAD_CONST               1 ('func')
             10 MAKE_FUNCTION            0
             12 CALL_FUNCTION            1
             14 CALL_FUNCTION            1
             16 CALL_FUNCTION            1
             18 STORE_NAME               1 (func)
             20 LOAD_CONST               2 (None)
             22 RETURN_VALUE

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue34876>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to