[pyar] Cómo evito eval() en ésta situación?
Daniel Moisset
dmoisset en machinalis.com
Mie Ago 17 10:23:06 ART 2016
Un lambda no te sirve?
r.select(lambda t: t.age > 35)
Alternativamente armar algo tipo field objects de django:
r.select(F("age") > 35)
Si queres exactamente la API que pusiste sin usar eval, vas a tener que
hacer un parser que arme un AST de la expresion y lo evalue. Parsimonious
me parece de lo mejorcito para hacerlo
Saludos,
D.
On Wed, Aug 17, 2016 at 1:43 PM, Gabriel Acosta <
acostadariogabriel en gmail.com> wrote:
> Buenas lista!
>
>
> Quiero deshacerme del uso de eval(), ésta porción de código implementa
> la operación `select` del álgebra relacional:
>
> class Relation(object):
> def __init__(self):
> self.tuples = set()
> self.header = []
>
> def add(self, data):
> self.tuples.add(data)
>
> def select(self, predicate):
> new_rela = Relation()
> new_rela.header = self.header
>
> _filter = {}
> for data in self.tuples:
> for e, i in enumerate(self.header):
> _filter[i] = data[e]
> if eval(predicate, {}, _filter):
> new_rela.add(data)
> print(new_rela.tuples)
>
>
> r = Relation()
> r.header = ['id', 'name', 'age']
> r.add((1, 'Gabriel', 25))
> r.add((4, 'Alice', 43))
> r.add((54, 'Bob', 33))
> r.select("age > 35")
>
> Alguna alternativa más 'limpia'?
>
> Un abrazo?
> --
> Gabriel Acosta
> NINJA-IDE Core Developer
> https://centaurialpha.github.io
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
--
Daniel F. Moisset - UK Country Manager
www.machinalis.com
Skype: @dmoisset
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20160817/b5481fac/attachment.html>
Más información sobre la lista de distribución pyar