Использование list вместо tuple в init модулей

Во многих крупных проектах, даже в таких как django, и в официальной документации к python используют list для перечисления доступных "извне" компонентов модуля в файле __init __.py:

__all__ = [foo, bar, other]

Тем не менее, запись

__all__ = (foo, bar, other)

тоже будет работать и, в теории, даёт не значительное увеличение производительности кода.

Почему тогда используют именно list?
Может есть какой то магический PEP, о котором я не знаю?


Ответы (1 шт):

Автор решения: AlTheOne

__all__ делают списком, потому что так указано в официальной документации Python: PEP8 также называет __all__ списком.

Вспомогательные инструменты могут полагаться на это соглашение и подсвечивать код как неверный с точки зрения PEP257.

Инициализация __all__ как кортежа не решает проблему экономии. Так как разрешение импортов оптимизировано в самом интерпретаторе.

Инициализация __all__ как множества может быть избыточным (особенно если значений немного/несколько), так как в основе множества лежит структура хэш-таблица.

→ Ссылка