Использование list вместо tuple в init модулей
Во многих крупных проектах, даже в таких как django, и в официальной документации к python используют list для перечисления доступных "извне" компонентов модуля в файле __init __.py:
__all__ = [foo, bar, other]
Тем не менее, запись
__all__ = (foo, bar, other)
тоже будет работать и, в теории, даёт не значительное увеличение производительности кода.
Почему тогда используют именно list?
Может есть какой то магический PEP, о котором я не знаю?
Ответы (1 шт):
__all__ делают списком, потому что так указано в официальной документации Python: PEP8 также называет __all__ списком.
Вспомогательные инструменты могут полагаться на это соглашение и подсвечивать код как неверный с точки зрения PEP257.
Инициализация __all__ как кортежа не решает проблему экономии. Так как разрешение импортов оптимизировано в самом интерпретаторе.
Инициализация __all__ как множества может быть избыточным (особенно если значений немного/несколько), так как в основе множества лежит структура хэш-таблица.