我正在查看一些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
?
contains
{@ 1}}方法是否特定于Web2py?或者它是否存在于标准Python中?
User.first_name
中的|
运算符是什么?
User.first_name.contains(k)|User.last_name.contains(k)
功能有什么作用?
答案 0 :(得分:7)
&
和|
不是按位和/或此处,但用于构建表示数据库查询的特殊对象!它们对应于SQL语句中的AND
和OR
答案 1 :(得分:0)
__contains__
的映射,但它确实出现在Py3k docs。答案 2 :(得分:0)
&
是按位和运算符。编写代码的人几乎肯定意味着and
,尽管对于布尔值,结果是相同的。
.contains()
是web2py提供的方法。 a.contains(b)
更加诡异地写成b in a
。
|
是按位OR运算符。同样,它们可能意味着or
。
reduce
将第一个参数给出的函数应用于第二个参数中的iterable,从左到右,首先使用前2个元素,然后使用该计算的结果和第三要素等