[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