Обновить

Комментарии 5

Тема интересная. Текущая реализация немного другая: hg.python.org/cpython/file/tip/Lib/collections/__init__.py

Использование locals() для строковой интерполяции мне кажется очень удобным. Питону не хватает простой интерполяции локальных переменных. В Groovy и CoffeeScript, например, можно написать что-то вроде "{name} is {some_value}". Но я думаю, что этот Python-вариант вполне сойдёт: "{name} is {some_value}".format(**locals()).

В текущей реализации namedtuple всех этих locals() нет, и правильно.

Вы, наверное, заметили, что __slots__ определяется как пустой кортеж. Питон в таком случае не использует для экземпляров словари в качестве пространств имён, что немного экономит ресурсы. Благодаря неизменяемости, которая наследуется от родительского класса (tuple), и невозможности добавлять новые атрибуты (потому что __slots__ = ()), экземпляры namedtuple-типов являются объектами-значениями, что позволяет использовать их, например, в качестве ключей в словарях.

__slots__ не имеет никакого отношения к тому, можно ли использовать объект в качестве ключей в словарях, или нет. Да и неизменяемость, в общем-то, не обязательна. См. docs.python.org/3/glossary.html#term-hashable.
__slots__ не имеет никакого отношения
Спасибо за верное замечание. В статье такого нет, это мой косяк :)

locals() нет, и правильно
Согласен, explicit is better.
Действительно, реализация стала чище с использованием format.
P.S. Ну надо же как все просто реализовано в Питоне, я был почте уверен, что внутри побольше магии.
А она есть :) Над комментариями небольшая плашка, там имя автора (James O'Beirne). Ткните туда, попадёте на страницу оригинала.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
buruki.ru
Дата регистрации
Численность
2–10 человек
Местоположение
Россия