Почему это не вызывает ошибку атрибута ? объект функции не имеет методов сравнения. Использует ли он как-то 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__ и т. Д.?
Функциональные объекты не определяют свои собственные сравнения или расширенные сравнения. Вместо этого они наследуют от объектов типа , которые реализуют богатые сравнения на основе адреса объекта в памяти .
Так что да, он эффективно использует адреса так же, как встроенная функция id () .
В Python 3 функции больше не подлежат заказу.