Python - reduce 函数和 | 运算符

2 投票
3 回答
2062 浏览
提问于 2025-04-16 18:54

我在看一些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. User.first_namecontains 方法是Web2py特有的吗?还是说它在标准Python中也存在?

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

  4. reduce 函数是干什么的?

3 个回答

0
  1. & 是位与运算符。写这段代码的人几乎肯定是想用 and,不过对于布尔值来说,结果是一样的。

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

  3. | 是位或运算符。同样,他们可能是想用 or

  4. reduce 会把第一个参数给的函数应用到第二个参数中的可迭代对象上,从左到右进行计算,首先用前两个元素,然后用计算的结果和第三个元素,依此类推。

0
  1. 按位与
  2. 我认为在这个上下文中,contains大致上可以理解为__contains__的映射,但它确实出现在Python 3文档中。
  3. 按位或
  4. reduce会遍历一个可迭代对象(第二个参数),并对所有元素调用传入的函数(第一个参数)。它会返回一个汇总值。
7
  1. 在Web2Py中,&|并不是我们通常理解的位与和位或,而是用来构建一个特殊的对象,这个对象代表了一个数据库查询!它们对应于SQL语句中的ANDOR
  2. containsWeb2Py的数据库抽象层的一部分。
  3. 参考第一条。
  4. reduce是折叠,这是一种非常基础的高阶函数,它的作用是将一个列表通过给定的函数简化成一个结果。

撰写回答