2024-06-16 14:20:12 发布
网友
运算符和方法之间有什么实质性的区别吗?在
我看到的唯一区别是他们的称呼方式,他们还有其他不同吗?在
例如,在Python连接中,切片、索引被定义为运算符,而(指字符串)upper()、replace()、strip()等都是方法。在
upper()
replace()
strip()
Is there any substantial difference between operators and methods?
实际上,因为每个操作符都映射到一个特定的Python special method,所以没有区别。而且,每当Python遇到运算符的使用时,它都会隐式调用其关联的特殊方法。例如:
1 + 2
隐式调用^{},这使得上面的表达式等价于1:
下面是一个演示:
>>> class Foo: ... def __add__(self, other): ... print("Foo.__add__ was called") ... return other + 10 ... >>> f = Foo() >>> f + 1 Foo.__add__ was called 11 >>> f.__add__(1) Foo.__add__ was called 11 >>>
当然,实际上使用(1).__add__(2)代替{}将是低效的(而且很难看!)因为它涉及到使用.运算符进行不必要的名称查找。在
(1).__add__(2)
.
也就是说,我不认为通常将运算符符号(+,-,*,等等)看作是它们关联的方法名(__add__,__sub__,__mul__等)的简写。毕竟,通过调用相同的方法,它们最终都做了相同的事情。在
+
-
*
__add__
__sub__
__mul__
1嗯,大致相当。如文档所述,here,是一组以字母r为前缀的处理反射操作数的特殊方法。例如,以下表达式:
r
A + B
可能实际上相当于:
B.__radd__(A)
如果A不实现__add__,而是B实现{}。在
A
B
如果我现在能理解这个问题。。。在
简而言之,一切都是对象的方法。您可以在operators中的python魔术类方法中找到“表达式运算符”方法。在
那么,为什么python有“性感”的东西,比如[x:y],[x],+,-?因为这对于大多数开发人员来说是很常见的事情,甚至对不熟悉开发人员也是如此,所以像+,-这样的数学函数会吸引人的眼球,他会知道发生了什么。与索引类似-它是许多语言中常见的语法。在
[x:y]
[x]
但是没有特殊的方法来表示upper,replace,strip方法,因此没有用于它的“表达式运算符”。在
upper
replace
strip
所以,“表达式运算符”和方法的区别,我只想说它看起来的样子。在
你的问题相当宽泛。对于您的示例,连接、切片和索引是使用特殊语法(例如,[])在字符串和列表上定义的。但其他类型的人可能会有不同的做法。在
[]
事实上,大多数(我认为所有)操作符的行为都是由magic methods来解释的,所以当你写一些类似x + y的东西时,一个方法就在幕后被调用了。在
x + y
从实际的角度来看,主要的区别之一是可用的语法运算符集是固定的,Python代码不能添加新的语法运算符。您不能编写自己的代码来定义一个名为$的新运算符,然后让x $ y工作。另一方面,您可以定义任意多个方法。这意味着您应该仔细选择分配给操作符的行为(如果有的话);由于操作符的数量有限,您需要确保不会将它们“浪费”在不常见的操作上。在
$
x $ y
实际上,因为每个操作符都映射到一个特定的Python special method,所以没有区别。而且,每当Python遇到运算符的使用时,它都会隐式调用其关联的特殊方法。例如:
隐式调用^{} ,这使得上面的表达式等价于1:
^{pr2}$下面是一个演示:
当然,实际上使用}将是低效的(而且很难看!)因为它涉及到使用
(1).__add__(2)
代替{.
运算符进行不必要的名称查找。在也就是说,我不认为通常将运算符符号(
+
,-
,*
,等等)看作是它们关联的方法名(__add__
,__sub__
,__mul__
等)的简写。毕竟,通过调用相同的方法,它们最终都做了相同的事情。在1嗯,大致相当。如文档所述,here,是一组以字母
r
为前缀的处理反射操作数的特殊方法。例如,以下表达式:可能实际上相当于:
如果}。在
A
不实现__add__
,而是B
实现{如果我现在能理解这个问题。。。在
简而言之,一切都是对象的方法。您可以在operators中的python魔术类方法中找到“表达式运算符”方法。在
那么,为什么python有“性感”的东西,比如
[x:y]
,[x]
,+
,-
?因为这对于大多数开发人员来说是很常见的事情,甚至对不熟悉开发人员也是如此,所以像+
,-
这样的数学函数会吸引人的眼球,他会知道发生了什么。与索引类似-它是许多语言中常见的语法。在但是没有特殊的方法来表示
upper
,replace
,strip
方法,因此没有用于它的“表达式运算符”。在所以,“表达式运算符”和方法的区别,我只想说它看起来的样子。在
你的问题相当宽泛。对于您的示例,连接、切片和索引是使用特殊语法(例如,
[]
)在字符串和列表上定义的。但其他类型的人可能会有不同的做法。在事实上,大多数(我认为所有)操作符的行为都是由magic methods来解释的,所以当你写一些类似
x + y
的东西时,一个方法就在幕后被调用了。在从实际的角度来看,主要的区别之一是可用的语法运算符集是固定的,Python代码不能添加新的语法运算符。您不能编写自己的代码来定义一个名为
$
的新运算符,然后让x $ y
工作。另一方面,您可以定义任意多个方法。这意味着您应该仔细选择分配给操作符的行为(如果有的话);由于操作符的数量有限,您需要确保不会将它们“浪费”在不常见的操作上。在相关问题 更多 >
编程相关推荐