Почему Python использует модули? - PullRequest
1 голос
/ 13 марта 2012

Почему Python использует модули, а не просто включает функции модуля в основной язык.Это было бы очень полезно и довольно просто, особенно для основных, таких как random, re и os.Если Python проповедует простоту и минимализм, зачем вам писать дополнительные строки кода?

Ответы [ 2 ]

15 голосов
/ 13 марта 2012

1) Zen of Python # 19: «Пространства имен - это одна замечательная идея - давайте сделаем еще больше!»

Именованные модули хороши тем, что они исключают любую возможностьстолкновение между функциями с одинаковыми именами.Если бы все было встроено, то os.error() столкнулось бы с logging.error() (и, не дай бог, вы попытаетесь определить свою собственную функцию с именем error()!)

То же самое со встроенной функцией int() и random.int() функция.Вы должны были бы написать последний как random_int(), который так же типичен, как и синтаксис модуля.Почему бы не сделать пространства имен явными и использовать модули?

Это та же самая причина, по которой синтаксис from os import * не одобряется - он загрязняет ваше пространство имен и дает возможность вызывать ошибки при столкновении имен.

2) Кто решает, что такое встроенный модуль и что такое модуль?

Большинство программ, которые вы пишете лично, включают os и re.Лично каждый сценарий, который я написал за последние три месяца, включал sqlite3, csv и logging.Должны ли они быть включены в качестве встроенных для каждой программы, которую когда-либо пишет любой программист Python?

Через некоторое время ваш список встроенных функций станет больше, чем Бен Хур.

4 голосов
/ 13 марта 2012

Эффективность памяти и скорости

Объекты, которые были созданы (и все в Python является объектом), занимают память, выделенную для процесса интерпретатора Python. При импорте модуля выполняется его код, что приводит к созданию множества объектов (функций, классов, данных и т. Д.), Большинство из которых должны сохраняться в памяти, чтобы быть полезными. Разделяя функциональные возможности на логически различные модули, мы позволяем программам выделять свою память только для объектов, обеспечивающих необходимые им функциональные возможности.

Если бы все было встроенным, у вас был бы огромный кусок памяти, выделенный для всех классов, функций и других объектов всей стандартной библиотеки, из которых менее 1% фактически было бы полезно для обычной программы. Кроме того, вы тратите время на выполнение всего кода, который создает все эти объекты, каждый раз при запуске интерпретатора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...