2010/10/26 Antoine Pitrou <span dir="ltr"><<a href="mailto:solipsis@pitrou.net">solipsis@pitrou.net</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
On Tue, 26 Oct 2010 19:22:32 +0200<br>
Cesare Di Mauro<br>
<div class="im"><<a href="mailto:cesare.di.mauro@gmail.com">cesare.di.mauro@gmail.com</a>> wrote:<br>
><br>
> At this time I have no other ideas to solve this problem.<br>
><br>
> Please, let me know if there's interest on a new patch to implement the<br>
> "compiler-based" solution.<br>
<br>
</div>Have you timed the EXTENDED_ARG solution?<br>
<br>
Regards<br>
<font color="#888888"><br>
Antoine.</font></blockquote><div><br></div><div>I made some a few minutes ago, and the results are unbelievable and counter-intuitive on my machine (Athlon64 2800+ socket 754, 2GB DDR 400, Windows 7 x64, Python 3.2a3 32 bits running at high priority):</div>
<div><br></div><div>python.exe -m timeit -r 1 -n 100000000 -s "def f(): pass" "f()"<br>Standard    : 100000000 loops, best of 1: 0.348 usec per loop<br>EXTENDED_ARG: 100000000 loops, best of 1: 0.341 usec per loop<br>
<br>python.exe -m timeit -r 1 -n 100000000 -s "def f(x, y, z): pass" "f(1, 2, 3)"<br>Standard    : 100000000 loops, best of 1: 0.452 usec per loop<br>EXTENDED_ARG: 100000000 loops, best of 1: 0.451 usec per loop<br>
<br>python.exe -m timeit -r 1 -n 100000000 -s "def f(a = 1, b = 2, c = 3): pass" "f(a = 1, b = 2, c = 3)"<br>Standard    : 100000000 loops, best of 1: 0.578 usec per loop<br>EXTENDED_ARG: 100000000 loops, best of 1: 0.556 usec per loop<br>
<br>python.exe -m timeit -r 1 -n 100000000 -s "def f(x, y, z, a = 1, b = 2, c = 3): pass" "f(1, 2, 3, a = 1, b = 2, c = 3)"<br>Standard    : 100000000 loops, best of 1: 0.761 usec per loop<br>EXTENDED_ARG: 100000000 loops, best of 1: 0.739 usec per loop<br>
<br>python.exe -m timeit -r 1 -n 100000000 -s "def f(*Args): pass" "f(1, 2, 3)"<br>Standard    : 100000000 loops, best of 1: 0.511 usec per loop<br>EXTENDED_ARG: 100000000 loops, best of 1: 0.508 usec per loop<br>
<br>python.exe -m timeit -r 1 -n 100000000 -s "def f(**Keys): pass" "f(a = 1, b = 2, c = 3)"<br>Standard    : 100000000 loops, best of 1: 0.789 usec per loop<br>EXTENDED_ARG: 100000000 loops, best of 1: 0.784 usec per loop<br>
<br>python.exe -m timeit -r 1 -n 100000000 -s "def f(*Args, **Keys): pass" "f(1, 2, 3, a = 1, b = 2, c = 3)"<br>Standard    : 100000000 loops, best of 1: 1.01 usec per loop<br>EXTENDED_ARG: 100000000 loops, best of 1: 1.01 usec per loop<br>
<br>python.exe -m timeit -r 1 -n 100000000 -s "def f(*Args, **Keys): pass" "f()"<br>Standard    : 100000000 loops, best of 1: 0.393 usec per loop<br>EXTENDED_ARG: 100000000 loops, best of 1: 0.41 usec per loop<br>
<br>I really can't explain it. Ouch!<br></div><div><br></div><div>Cesare</div>