Python - 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])
以下是我的问题:
我知道
lambda a,b:a&b
定义了一个包含a
和b
的函数。那么a&b
是什么呢?User.first_name
的contains
方法是Web2py特有的吗?还是说它在标准Python中也存在?在
User.first_name.contains(k)|User.last_name.contains(k)
中,这个|
运算符是什么?reduce
函数是干什么的?
3 个回答
0
&
是位与运算符。写这段代码的人几乎肯定是想用and
,不过对于布尔值来说,结果是一样的。.contains()
是 web2py 提供的一种方法。a.contains(b)
更符合 Python 的写法是b in a
。|
是位或运算符。同样,他们可能是想用or
。reduce
会把第一个参数给的函数应用到第二个参数中的可迭代对象上,从左到右进行计算,首先用前两个元素,然后用计算的结果和第三个元素,依此类推。
0
- 按位与。
- 我认为在这个上下文中,contains大致上可以理解为
__contains__
的映射,但它确实出现在Python 3文档中。 - 按位或。
- reduce会遍历一个可迭代对象(第二个参数),并对所有元素调用传入的函数(第一个参数)。它会返回一个汇总值。
7
- 在Web2Py中,
&
和|
并不是我们通常理解的位与和位或,而是用来构建一个特殊的对象,这个对象代表了一个数据库查询!它们对应于SQL语句中的AND
和OR
。 - contains是Web2Py的数据库抽象层的一部分。
- 参考第一条。
- reduce是折叠,这是一种非常基础的高阶函数,它的作用是将一个列表通过给定的函数简化成一个结果。