2

我正在查看一些 Web2py 代码。

该变量tokens是某种字符串列表。更准确地说,它被定义为tokens = form.vars.name.split()where form.vars.nameis a string。

我的问题涉及以下说明:

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定义aand的函数b。是什么a&b

  2. 是特定于 Web2py的contains方法吗?User.first_name或者它是否存在于标准 Python 中?

  3. 这个|运算符是User.first_name.contains(k)|User.last_name.contains(k)什么?

  4. reduce功能有什么作用?

4

3 回答 3

7
  1. 在 Web2Py中&| 不是按位和/或在这里,而是用于构建表示数据库查询的特殊对象!它们对应于ANDOR在 SQL 语句中
  2. 包含Web2Pys DAL的一部分
  3. 见 1。
  4. reduce 是fold,一个非常基本的高阶函数,它使用给定的函数从本质上将列表简化为结果。
于 2011-06-03T16:59:14.043 回答
0
  1. 按位和.
  2. 我相信 contains 在这种情况下或多或少是到 的映射__contains__,但它确实出现在Py3k docs中。
  3. 按位或
  4. reduce遍历一个可迭代对象(参数 2)并在所有元素上调用传递的函数(参数 1)。它返回聚合值。
于 2011-06-03T16:56:53.043 回答
0
  1. &是按位和运算符。编写代码的人几乎可以肯定的意思是and,尽管对于布尔值,结果是相同的。

  2. .contains()是web2py提供的一种方法。a.contains(b)更Python地写为b in a.

  3. |是按位或运算符。再一次,他们可能的意思是or

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

于 2011-06-03T16:57:42.040 回答