Продолжаю изучать Пайтон.
Зачем?
Сказали, нужно переписать все с Perl на него, так как первый люди не понимают.
> python -c 'import this' | grep 'only one'
There should be one-- and preferably only one --obvious way to do it.
Но только начал изучать - сразу удивления и вопросы.
У объекта список искал метод len. Не нашёл.
Но нашёл функцию len, которая, как говорится, вызывает метод __len__.
При этом функция len - это объект, который имеет свои методы,
в том числе мето __call__:
>>> len.__call__([1,2,3])
3
То есть len - это len.__call__, который вызывает [1,2,3].__len__.
Но для встроенных типов len не делает таких вызовов, а просто сразу вернет значение с C структуры (CPython).
Говорят, это вторая причина почему так сделали.
Первая причина: Диктатору больше нравиться len(l), чем l.len().
Но злые языки поговаривают, что он не мог решить: метод или свойство, - поэтому выбрал функцию.
Или я капризничаю? Но ведь Пайтон позиционируется как простой язык легкий в обучении.
Як то кажуть "А ваша Галя балувана".
Зачем?
Сказали, нужно переписать все с Perl на него, так как первый люди не понимают.
> python -c 'import this' | grep 'only one'
There should be one-- and preferably only one --obvious way to do it.
Но только начал изучать - сразу удивления и вопросы.
У объекта список искал метод len. Не нашёл.
Но нашёл функцию len, которая, как говорится, вызывает метод __len__.
При этом функция len - это объект, который имеет свои методы,
в том числе мето __call__:
>>> len.__call__([1,2,3])
3
То есть len - это len.__call__, который вызывает [1,2,3].__len__.
Но для встроенных типов len не делает таких вызовов, а просто сразу вернет значение с C структуры (CPython).
Говорят, это вторая причина почему так сделали.
Первая причина: Диктатору больше нравиться len(l), чем l.len().
Но злые языки поговаривают, что он не мог решить: метод или свойство, - поэтому выбрал функцию.
Или я капризничаю? Но ведь Пайтон позиционируется как простой язык легкий в обучении.
Як то кажуть "А ваша Галя балувана".