gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:44:50 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com