【问题标题】:Why use the functions in the operator module?为什么要使用操作员模块中的功能?
【发布时间】:2017-03-19 23:51:42
【问题描述】:

python 的operator 模块有什么意义?那里有许多明显多余的功能,我不明白为什么要使用这些功能而不是其他方式来做同样的事情。

例如:

>>> import operator
>>> operator.truth(0)
False
>>> bool(0)
False

似乎做同样的事情。

【问题讨论】:

标签: python operators


【解决方案1】:

鉴于bool 的存在,现在很难想到operator.truth 的任何用例。请注意,bool 是 2.2.1 中的新内容,并且操作符早于它,因此它可能由于历史原因现在才存在。 operator模块中还有其他一些无用的函数such as operator.abs,它只是调用了内置的abs

虽然operator 中的所有内容都不是完全没用的,但运营商的C implementation(如果可用)可以提供比纯Python 实现更高的性能。对于通常由 lambda 函数处理的任务,itemgetterattrgettermethodcaller 函数更具可读性,并且通常可以更好地执行实用函数。

【讨论】:

    【解决方案2】:

    有时能够访问运算符的功能但作为一个函数很有用。例如,您可以将两个数字相加。

    >> print(1 + 2)
    3
    

    你也可以

    >> import operator
    >> print(operator.add(1, 2))
    3
    

    函数方法的一个用例可能是您需要编写一个计算器函数,该函数根据一个简单的公式返回一个答案。

    import operator as _operator
    
    operator_mapping = {
        '+': _operator.add,
        '-': _operator.sub,
        '*': _operator.mul,
        '/': _operator.truediv,
    }
    
    def calculate(formula):
        x, operator, y = formula.split(' ')
    
        # Convert x and y to floats so we can perform mathematical
        # operations on them.
        x, y = map(float, (x, y))
    
        return operator_mapping[operator](x, y)
    
    print(calculate('1 + 2'))  # prints 3.0
    

    【讨论】:

      【解决方案3】:

      为了完整性和一致性。因为将所有操作符放在一个地方可以让您稍后进行动态查找:

      getattr(operator, opname)(*arguments)
      

      省略一些操作,因为它们是多余的,会破坏这个目的。由于 Python 名称只是引用,因此向 operator 模块添加一个名称既便宜又容易,这只是另一个引用。

      【讨论】:

      • 对我来说不是很有说服力的答案,因为不同的操作需要不同数量的参数。
      • @wim:我确实在这里动态传递了参数。您也可以根据它们所采用的运算符数量将字符串运算符简单地分组。
      • 不太了解用例,似乎违反了“一种明显的方法”。您是否知道 github 上的任何项目,其中代码实际上使用了这样的操作员模块上的动态查找?
      • @wim:我们可以通过these results。我无法将其缩小到完全匹配,但我看到pandas 在他们的测试中使用了getattr(operator, ...)
      • @MartijnPieters 进行动态查找是什么意思?你能写一个例子吗?
      猜你喜欢
      • 2013-09-02
      • 2013-10-11
      • 2011-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多