Недавно у меня была возможность взглянуть на каркас 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, которую я, вероятно, упускаю, позволяет этому работать?