Scott Dial wrote:
The regression is purely in the way an argument list is reduced to a dictionary.
To further elaborate: Python 2.4:
import dis dis.dis(compile('f(a=3, b=1, a=4)', '', 'eval')) Traceback (most recent call last): File "<stdin>", line 1, in ? SyntaxError: duplicate keyword argument
Python 2.5:
import dis dis.dis(compile('f(a=3, b=1, a=4)', '', 'eval')) 1 0 LOAD_NAME 0 (f) 3 LOAD_CONST 0 ('a') 6 LOAD_CONST 1 (3) 9 LOAD_CONST 2 ('b') 12 LOAD_CONST 3 (1) 15 LOAD_CONST 0 ('a') 18 LOAD_CONST 4 (4) 21 CALL_FUNCTION 768 24 RETURN_VALUE
The old compiler checked for this, but the AST-based compiler just blindly compiles the entire keyword argument sequence. -Scott -- Scott Dial scott@scottdial.com scodial@cs.indiana.edu