[pyar] Cómo evito eval() en ésta situación?

Gabriel Acosta acostadariogabriel en gmail.com
Mie Ago 17 09:43:50 ART 2016


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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20160817/c75854fc/attachment.html>


Más información sobre la lista de distribución pyar