Недавно у меня была возможность взглянуть на фреймворк web2py, и хотя у меня есть некоторый предыдущий опыт работы с Django и, в большей степени, с простым Python, я не мог разобраться в системе запросов который использует web2py.
Возьмем этот пример из книги web2py
db = DAL('sqlite://storage.db')
myquery = (db.mytable.myfield > 'A')
myset = db(myquery)
rows = myset.select()
for row in rows:
print row.myfield
В комментарии SO автор web2py говорит, что (db.mytable.myfield> 'A')
не оценивается как True / Непосредственно False, и он фактически оценивается для каждой строки во время выбора. Я понимаю, что именно это позволяет использовать эти выражения в качестве объектов запроса и даже комбинировать их.
Я пытался найти ответ на этот вопрос в Интернете, но не смог, поэтому вот мой вопрос: как эти выражения запроса не оцениваются сразу как True / False? Почему значение myquery, скажем, не истинно? Какая функция Python, которой мне, вероятно, не хватает, позволяет этому работать?