2012-03-13 6 views
1

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

+3

Некоторые программы могут не использовать эти модули. Зачем вам нужен код в вашей программе, который вы не собираетесь использовать? –

+0

Хотя это верно, многие, многие программы используют модули re, os или random, в то время как некоторые из более неясных функций в python используются значительно меньше. – Billjk

+6

«Пространства имен - одна хорошая идея - давайте сделаем больше!» - http://www.python.org/dev/peps/pep-0020/ – monkut

ответ

15

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

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

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

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

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

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

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

4

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

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

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

+0

+1 проницательный. –

Смежные вопросы