2011/6/4 Carlos Zuniga <carlos....@gmail.com>: > 2011/6/4 Edinson Padron <edinson.padro...@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 >
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 Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/