__gt__ vs> и так далее - PullRequest
1 голос
/ 19 мая 2019

В некоторых классах Python есть некоторые операторы, такие как __gt__ или __lt__. Они названы по-фортрановски.

В чем разница между приведенными выше операторами и < или >?Не лучше ли использовать __operators__, чем < или >?

Ответы [ 2 ]

7 голосов
/ 19 мая 2019

Метод __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), 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:

>>> from operator import gt
>>> gt(1, 2.5)
False
1 голос
/ 19 мая 2019

Между ними нет никакой разницы.

Когда вы должны использовать >

При регулярном выполнении вещей, например,

>>> 80 > 70
True
>>> 

Когда вы должны использовать gt

Когда map ping, или sort ing или что-то, чтобы не иметь 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]
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...