Один из моих сотрудников использовал встроенную функцию max (на Python 2.7), и он обнаружил странное поведение.Python любопытство: []> lambda n: n
по ошибке, вместо того, чтобы использовать аргумент ключевое слово ключ (как в key=lambda n: n
) для предварительной сортировки списка, переданного в качестве параметра, он сделал:
>>> max([1,2,3,3], lambda n : n)
[1, 2, 3, 3]
Он делал то, что в документации поясняется как:
Если предусмотрено два или более позиционных аргумента, возвращается наибольший из аргументов positional., так что теперь мне интересно, почему это происходит:
>>> (lambda n:n) < []
True
>>> def hello():
... pass
...
>>> hello < []
True
>>> len(hello)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: object of type 'function' has no len()
Я знаю, что это не имеет большого значения, но я был бы признателен, если какой-либо из stackoverflowers может объяснить, как эти сравнения внутренне сделаны (или назовите меня в направлении, где я могу найти эту информацию). :-)
Заранее спасибо!
Как вы перешли от 'lambda n: n' к решению сравнить с объектами функции? :) –
@Jon Clements: ну ... просто делаю тесты ... так как лямбда - это функция, я начал делать странные тесты с функциями **: D ** (о, и я сделал waaaay больше, чем те, которые я опубликовал здесь) – BorrajaX