[issue23316] Incorrect evaluation order of function arguments with *args
Neil Girdhar
report at bugs.python.org
Sun Jan 25 23:20:36 CET 2015
Neil Girdhar added the comment:
I assume this is the problem:
>>> dis.dis('f(*a(), b=b())')
1 0 LOAD_NAME 0 (f)
3 LOAD_NAME 1 (a)
6 CALL_FUNCTION 0 (0 positional, 0 keyword pair)
9 LOAD_CONST 0 ('b')
12 LOAD_NAME 2 (b)
15 CALL_FUNCTION 0 (0 positional, 0 keyword pair)
18 CALL_FUNCTION_VAR 256 (0 positional, 1 keyword pair)
21 RETURN_VALUE
— looks fine.
>>> dis.dis('f(b=b(), *a())')
1 0 LOAD_NAME 0 (f)
3 LOAD_NAME 1 (a)
6 CALL_FUNCTION 0 (0 positional, 0 keyword pair)
9 LOAD_CONST 0 ('b')
12 LOAD_NAME 2 (b)
15 CALL_FUNCTION 0 (0 positional, 0 keyword pair)
18 CALL_FUNCTION_VAR 256 (0 positional, 1 keyword pair)
21 RETURN_VALUE
Joshua, we could make function calls take:
x lists
y dictionaries
one optional list
z dictionaries
but we as well do all the merging in advance:
one optional list
one optional dictionary
one optional list
one optional dictionary
which is representable in three bits, but four is easier to decode I think.
----------
nosy: +neil.g
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue23316>
_______________________________________
More information about the Python-bugs-list
mailing list