[Python-es] Mapear un 'get_attr' [P]
Carlos Zuniga
carlos.zun en gmail.com
Sab Jun 4 16:57:04 CEST 2011
2011/6/4 Edinson Padron <edinson.padron23 en gmail.com>:
>
>> 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
>>> timeit.timeit('[x.numerator for x in a]', 'a=(1,2,3,4)')
1.0678210258483887
Esto usando python 2.6
Saludos
--
Linux Registered User # 386081
A menudo unas pocas horas de "Prueba y error" podrán ahorrarte minutos
de leer manuales.
Más información sobre la lista de distribución Python-es