某些python类具有一些__gt__
或__lt__
之类的运算符,它们是从fortran语言中命名的。
上述运算符与<
或>
有什么区别?
使用__operators__
比使用<
或>
好吗?
答案 0 :(得分:7)
__gt__
方法是>
的实现,同样,其他比较运算符也具有类似的方法:
object.__lt__(self, other)
object.__le__(self, other)
object.__eq__(self, other)
object.__ne__(self, other)
object.__gt__(self, other)
object.__ge__(self, other)
这些是所谓的“丰富比较”方法。运算符和方法名称之间的对应关系如下:
x<y
调用x.__lt__(y)
,x<=y
调用x.__le__(y)
,x==y
调用x.__eq__(y)
,{{ 1}}呼叫x!=y
,x.__ne__(y)
呼叫x>y
和x.__gt__(y)
呼叫x>=y
。
通常,人们在代码中使用运算符x.__ge__(y)
等。但是您需要使用>
及类似方法在自己的类上实现功能。
(几乎总是)不应在代码中直接使用__gt__
方法,因为数据模型还定义了一些在这些方法之外处理的特殊情况。
例如,如果一个操作数未实现比较,则它会与交换的运算符进行反向比较:
__gt__
如果您需要“功能比较”,则应使用>>> (1).__gt__(2.5)
NotImplemented
>>> (2.5).__lt__(1)
False
>>> 1 > 2.5
False
模块:
operator
答案 1 :(得分:1)
它们之间没有区别。
何时应使用>
定期做事时,例如
>>> 80 > 70
True
>>>
何时应使用gt
在map
ping或sort
或其他情况下,没有lambda
:
>>> l = [1, 2, 3]
>>> list(map((2).__gt__, l))
[True, False, False]
>>>
所以不需要:
>>> l = [1, 2, 3]
>>> list(map(lambda x: x < 2, l))
[True, False, False]
>>>