Как python сравнивает функции?

Почему это не вызывает ошибку атрибута ? объект функции не имеет методов сравнения. Использует ли он как-то id ()?

fun1 = lambda:x
fun2 = lambda:x
print fun1 == fun1 # True
print fun1 == fun2 # False
print fun1 > fun2 # True
print fun1 < fun2 # False
print fun1 > 1 # True

Я понимаю, что он сравнивает адреса, но как? Это какой-то низкоуровневый взлом для перехвата __lt__, __eq__ и т. Д.?

26
задан Charles 30 October 2011 в 01:32
поделиться

1 ответ

Функциональные объекты не определяют свои собственные сравнения или расширенные сравнения. Вместо этого они наследуют от объектов типа , которые реализуют богатые сравнения на основе адреса объекта в памяти .

Так что да, он эффективно использует адреса так же, как встроенная функция id () .

В Python 3 функции больше не подлежат заказу.

23
ответ дан 28 November 2019 в 07:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: