Python - 减少函数和|操作者

时间:2011-06-03 16:45:53

标签: python web2py reduce

我正在查看一些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定义了ab的功能。什么是a&b

  2. contains {@ 1}}方法是否特定于Web2py?或者它是否存在于标准Python中?

  3. User.first_name中的|运算符是什么?

  4. User.first_name.contains(k)|User.last_name.contains(k)功能有什么作用?

3 个答案:

答案 0 :(得分:7)

  1. 在Web2Py中&| 不是按位和/或此处,但用于构建表示数据库查询的特殊对象!它们对应于SQL语句中的ANDOR
  2. containsWeb2Pys DAL
  3. 的一部分
  4. 见1.
  5. reduce is fold,这是一个非常基本的高阶函数,它基本上使用给定的函数将列表缩减为结果。

答案 1 :(得分:0)

  1. Bitwise and
  2. 我相信包含,在该上下文中或多或少是__contains__的映射,但它确实出现在Py3k docs
  3. Bitwise or
  4. reduce遍历可迭代对象(参数2)并在所有元素上调用传递的函数(参数1)。它返回聚合值。

答案 2 :(得分:0)

  1. &是按位和运算符。编写代码的人几乎肯定意味着and,尽管对于布尔值,结果是相同的。

  2. .contains()是web2py提供的方法。 a.contains(b)更加诡异地写成b in a

  3. |是按位OR运算符。同样,它们可能意味着or

  4. reduce将第一个参数给出的函数应用于第二个参数中的iterable,从左到右,首先使用前2个元素,然后使用该计算的结果和第三要素等