Python - 减少函数和| 操作者

Fra*_*ois 2 python reduce web2py

我正在看一些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])
Run Code Online (Sandbox Code Playgroud)

这是我的问题:

  1. 我知道lambda a,b:a&b定义的函数ab.什么是a&b

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

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

  4. 这个reduce功能有什么作用?

Joc*_*zel 7

  1. 在web2py中&| 不按位和/或在这里,而是用于建立表示数据库查询的特殊对象!它们对应于ANDORSQL语句
  2. containsWeb2Pys DAL的一部分
  3. 见1.
  4. reduce是fold,一个非常基本的高阶函数,它基本上使用给定的函数将列表减少到结果.

  • 关于这是否很好地利用了运算符重载,我很难受.一方面,它允许用户简洁地陈述他们想要做的事情.另一方面,没有经验的读者将完全混淆,因为运算符重载的意义如此不同,以至于运算符的含义并不常见(至少我认为这种情况并不常见). (2认同)