Python中的一切都是对象
我们都知道这句话,所有 Pythonistas(包括我)都喜欢它。在这方面,研究运营商很有趣。它们似乎不是对象,例如
>>> type(*) # or /, +, -, < ...
Run Code Online (Sandbox Code Playgroud)
返回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
Run Code Online (Sandbox Code Playgroud)
所以operation(1, 2, +)
会返回3
,operation(1, 2, *)
会返回2
,operation(1, 2, <)
会返回True
,等等......
为什么这不在python中实现?或者是,如果,如何?
备注:我知道这个operator
模块,它也不适用于上面的示例函数。此外,我知道可以通过一种方式解决它,例如,operations(operand1, operand2, '>')
并通过相应运算符的字符串表示找到所需的操作。但是,我问的原因是操作符对象不存在能够作为函数中的参数传递,例如像其他所有 python 对象一样。
每个值都是一个对象。运算符不是值;它们是语法。然而,它们是由函数实现的,函数是值。该operator
模块提供对这些功能的访问。
尽管具有暗示性,但完全不适用于 Python 的是,一种语言可以提供额外的语法来将运算符转换为“名称”。例如,在 Haskell 中,您可以使用中缀运算符,就像+
使用括号的名称一样。在你想operation(3, 5, +)
用 Python编写的地方,Haskell 允许operation 3 5 (+)
.
没有技术上的原因为什么不能将类似的东西添加到 Python 中,但也没有令人信服的设计理由来添加它。该operator
模块是足够的,并且“更适合”作为一个整体的语言设计。
归档时间: |
|
查看次数: |
131 次 |
最近记录: |