[pyar] Compilador.py

Pablo Ziliani pablo en kultroom.com
Jue Jul 8 23:36:16 ART 2010


Roberto Alsina wrote:
> On Thursday 08 July 2010 23:16:38 Pablo Ziliani wrote:
>   
>> Pablo Ziliani wrote:
>>     
>>> Roberto Alsina wrote:
>>>       
>>>> On Thursday 08 July 2010 21:03:48 Jesús Francisco wrote:
>>>>         
>>>>>>        if filename[-3] == '.':    # Comprueba que el nombre de archivo
>>>>>>             
>>>>>     
>>>>>     if filename[-3:] == '.py': # Así hace lo que dice el comentario
>>>>>           
>>>> filename.endswith('.py')
>>>>         
>>> No sé tú, pero yo...
>>>
>>> pablo en pulp:~$ python -V
>>> Python 2.6.4
>>> pablo en pulp:~$ uname -a
>>> Linux pulp 2.6.31-22-generic #60-Ubuntu SMP Thu May 27 00:22:23 UTC
>>> 2010 i686 GNU/Linux
>>> pablo en pulp:~$ python -m timeit "'archivo.py'.endswith('.py')"
>>> 1000000 loops, best of 3: 0.541 usec per loop
>>> pablo en pulp:~$ python -m timeit "'archivo.py'[-3:] == '.py'"
>>> 1000000 loops, best of 3: 0.326 usec per loop
>>>       
>> ... lo cual no pretende ser un argumento para usarlo (de hecho y aunque
>> es irrelevante, en el fondo creo que e quedo con endswith porque es más
>> claro), simplemente me llamó la atención que un método que hace sólo eso
>> en particular sea menos eficiente que un slice.
>>
>> (perdón por el post doble pero me faltó poner eso en el email anterior)
>>     
>
> Lo más probable es que la diferencia sea el lookup del método y la llamada 
> nomás.

puede ser, no sé cómo medir la llamada, pero:

pablo en pulp:~$ python -m timeit -s 
"archivo='archivo.py';endswith=archivo.endswith" "endswith('.py')"
1000000 loops, best of 3: 0.422 usec per loop
pablo en pulp:~$ python -m timeit -s 
"archivo='archivo.py';endswith=archivo.endswith" "archivo[-3:] == '.py'"
1000000 loops, best of 3: 0.322 usec per loop

a ver...

 >>> archivo='archivo.py'
 >>> endswith = archivo.endswith
 >>> dis("endswith('.py')")
          0 LOAD_NAME       25710 (25710)
          3 <115>           26999
          6 LOAD_GLOBAL     10344 (10344)
          9 <39>
         10 <46>
         11 JUMP_IF_TRUE    10105 (to 10119)
         14 STORE_SLICE+1
 >>> dis("archivo[-3:] == '.py'")
          0 STORE_GLOBAL    25458 (25458)
          3 BUILD_MAP       30313
          6 JUMP_IF_FALSE   11611 (to 11620)
          9 DELETE_SLICE+1
         10 INPLACE_DIVIDE
         11 FOR_ITER        15648 (to 15662)
         14 DELETE_SUBSCR
         15 SLICE+2
         16 <39>
         17 <46>
         18 JUMP_IF_TRUE    10105 (to 10126)

¿y aura? me quedé sin ideas...



More information about the pyar mailing list