【问题标题】:Python - reduce function and | operatorPython - 减少函数和|操作员
【发布时间】:2023-03-24 02:55:01
【问题描述】:

我正在查看一些 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 函数有什么作用?

【问题讨论】:

  • 您有机会查看文档吗?
  • 如果contains(k) 返回一个布尔值,它可以重写为query = all(User.first_name.contains(k) or User.last_name.contains(k) for k in tokens)
  • 忽略我之前的评论,因为contains() 不返回布尔值,并且已为其他目的重新加载位运算符。有关更多信息,请参阅 Jochen Ritzel 的答案。

标签: python web2py reduce


【解决方案1】:
  1. 在 Web2Py 中 &| 不是按位和/或在这里,而是用于构建表示数据库查询的特殊对象!分别对应SQL语句中的ANDOR
  2. containsWeb2Pys DAL 的一部分
  3. 见 1。
  4. reduce 是fold,它是一个非常基本的高阶函数,它使用给定的函数从本质上将列表简化为结果。

【讨论】:

  • 我很难理解这是否是运算符重载的好方法。一方面,它允许用户简洁地陈述他们想要做什么。另一方面,没有经验的读者会完全糊涂,因为运算符重载的含义如此不同,以至于运算符的含义不常见(至少我认为它不常见)。
【解决方案2】:
  1. & 是按位与运算符。编写代码的人几乎肯定是指and,尽管对于布尔值,结果是相同的。

  2. .contains()是web2py提供的一个方法。 a.contains(b) 在 python 上更写成b in a

  3. | 是按位或运算符。同样,他们可能指的是or

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

【讨论】:

    【解决方案3】:
    1. Bitwise and
    2. 我相信 contains,在这种情况下或多或少是到 __contains__ 的映射,但它确实出现在 Py3k docs 中。
    3. Bitwise or
    4. reduce 遍历一个可迭代对象(参数 2)并在所有元素上调用传递的函数(参数 1)。它返回聚合值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-01
      • 2018-09-11
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 2023-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多