[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