python - Python 中的一切都是对象,为什么运算符不是?

标签 python operators

Everything in Python is an object

我们都知道这句话,所有 Python 爱好者(包括我)都喜欢它。在这方面,观察运营商很有趣。它们似乎不是物体,例如

>>> type(*)     # or /, +, -, < ...

返回SyntaxError: invalid syntax

但是,在某些情况下,将它们视为对象可能会很有用。例如,考虑一个类似的函数

def operation(operand1, operand2, operator):
    """
    This function returns the operation of two operands defined by the operator as parameter
    """

    # The following line is invalid python code and should only describe the function
    return operand1 <operator> operand2

所以operation(1, 2, +)将返回3 , operation(1, 2, *)将返回2 , operation(1, 2, <)将返回True等等...

为什么Python没有实现这个功能?或者是,如果,如何?

<小时/>

备注:我确实知道 operator 模块,这也不适用于上面的示例函数。我也知道可以通过一种方式解决它,例如operations(operand1, operand2, '>')并通过相应运算符的字符串表示找到所需的操作。然而,我询问不存在运算符对象能够作为函数中的参数传递的原因,例如就像其他所有 Python 对象一样。

最佳答案

每个都是一个对象。运算符不是值;它们是语法。然而,它们是由函数(即值)实现的。 operator 模块提供对这些函数的访问。

<小时/>

虽然有暗示性,但完全不适用于 Python,因为语言可以提供额外的语法来将运算符转换为“名称”。例如,在 Haskell 中,您可以使用像 + 这样的中缀运算符,就好像它是使用括号的名称一样。当您想在 Python 中编写 操作(3, 5, +) 时,Haskell 允许操作 3 5 (+)

没有任何技术原因无法将类似的东西添加到Python中,但也没有令人信服的设计理由来添加它。 operator 模块就足够了,并且更“适合”整个语言设计。

关于python - Python 中的一切都是对象,为什么运算符不是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59683335/

相关文章:

python - 写入文件时如何格式化JSON数据

python - BeautifulSoup - python - table 刮

python - py2neo SocketError : Connection refused, 但curl可以工作

c++ - this->field 与 C++ 中的 this.field

programming-languages - 该运算符 "+="的名字是什么?

python - 从 Pandas 数据框中选择特定列包含数字的行

python - 将 Boto3(版本 1.8 或更高版本)与 Moto 一起使用时如何模拟 AWS 调用

C++,矩阵运算,运算符问题

c - 结合指针解引用运算符正确使用预增量运算符

python - python有转换运算符吗?