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/