2011/6/4 Carlos Zuniga <[email protected]>:
> 2011/6/4 Edinson Padron <[email protected]>:
>>
>>> te refieres a getattr?
>>>
>>> getattr(x, 'att')
>>>
>>
>> lamentablemente no es a lo que me refiero, recuerdo que es semejante a lo
>> siguiente:
>>
>> map(funcion('attr'), iterable)
>
> ahh, un closure, tendrías que definir una función así:
>
> def getxattr(attr):
> def foo(x):
> return getattr(x,attr)
> return foo
>
> map(getxattr('attr'), iterable)
>
> No sé si ya existe esa función
>
>>
>>> [x.att for x in iterable]
>>>
>>
>> lo considere, pero como map esta implementado en C, es mucho mas rápido que
>> una list comprehension
>
> Estas seguro? un simple test me muestra que la list comprehension es
> mucho más rápida:
>
> >>> import timeit
> >>> timeit.timeit('map(lambda x: x.numerator, a)', 'a=(1,2,3,4)')
> 2.7023310661315918
>
> >>> timeit.timeit('map(getxattr, a)', """
> a=(1,2,3,4)
> def getxattr(x):
> return x.numerator
> """)
> 2.5119788646697998
>
> >>> timeit.timeit("map(getxattr('numerator'),a)", """
> a=(1,2,3,4)
> def getxattr(attr):
> def foo(x):
> return getattr(x, attr)
> return foo
> """)
> 4.4668419361114502
>
Ligera modificación para evitar generar la función foo en cada
iteración, pero la velocidad aún queda lejos...
>>> timeit.timeit('map(bar,a)', """
a=(1,2,3,4)
def getxattr(attr):
def foo(x):
return getattr(x, attr)
return foo
bar=getxattr('numerator')
""")
3.4971849918365479
_______________________________________________
Python-es mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/