Python - уменьшить функцию и | оператор - PullRequest
2 голосов
/ 03 июня 2011

Я смотрю на некоторый код Web2py.

Переменная tokens является своего рода списком строк.Чтобы быть более точным, он определяется как tokens = form.vars.name.split(), где form.vars.name - строка.

Мой вопрос касается следующей инструкции:

query = reduce(lambda a,b:a&b,[User.first_name.contains(k)|User.last_name.contains(k) for k in tokens])

Вот мои вопросы:

  1. Я знаю, lambda a,b:a&b определяет функцию a и b.Что такое a&b?

  2. Является ли метод contains User.first_name специфичным для Web2py?Или он существует в стандартном Python?

  3. Что это за оператор | в User.first_name.contains(k)|User.last_name.contains(k)?

  4. Что означает reduceфункцию делать?

Ответы [ 3 ]

7 голосов
/ 03 июня 2011
  1. В Web2Py & и | не являются побитовыми и / или здесь , но используются для создания специального объекта, который представляет запрос к базе данных! Они соответствуют AND и OR в операторах SQL
  2. содержит является частью Web2Pys DAL
  3. См. 1.
  4. уменьшение - кратность , очень фундаментальная функция высшего порядка, которая, по существу, сводит список к результату, используя данную функцию.
0 голосов
/ 03 июня 2011
  1. & является побитовым и оператором. Человек, пишущий код, почти наверняка имел в виду and, хотя для логических значений результат тот же.

  2. .contains() - это метод, предоставляемый web2py. a.contains(b) более питонически написано как b in a.

  3. | - оператор побитового ИЛИ. Опять же, они, вероятно, имели в виду or.

  4. reduce применяет функцию, заданную в качестве первого аргумента, к итерируемому во втором аргументе слева направо, сначала с первыми 2 элементами, затем с результатом этого вычисления и третьим элементом и т. д.

0 голосов
/ 03 июня 2011
  1. Битовый и .
  2. Я полагаю, содержит, в этом контексте более или менее отображение на __contains__, но оно появляется в Py3k docs .
  3. Побитовый или .
  4. lower выполняет итерацию через итерируемый объект (параметр 2) и вызывает переданную функцию (параметр 1) для всех элементов. Возвращает совокупное значение.
...