Будет ли Python быстрее, если я помещу обычно вызываемый код в отдельные методы или файлы? - PullRequest
1 голос
/ 04 ноября 2010

Я думал, что однажды прочитал на SO, что Python будет компилироваться и работать немного быстрее, если обычно вызываемый код помещается в методы или отдельные файлы.Есть ли у кода Python в методах преимущество перед отдельными файлами или наоборот?Может кто-нибудь объяснить, почему это так?Я предполагаю, что это связано с выделением памяти и сборкой мусора или чем-то подобным.

Ответы [ 3 ]

4 голосов
/ 04 ноября 2010

Это не имеет значения.Не структурируйте вашу программу на скорости кода;структурировать это вокруг скорости кодера.Если вы пишете что-то на Python, и это слишком медленно, найдите узкое место с помощью cProfile и ускорите его.Как ты ускоряешь это?Вы пробуете вещи и профилируете их.Как правило, накладные расходы на вызовы функций в критических циклах высоки.Байтная компиляция вашего кода занимает очень мало времени и должна выполняться только один раз.

2 голосов
/ 04 ноября 2010

Нет. Независимо от того, где вы разместили свой код, он должен быть проанализирован один раз и скомпилирован при необходимости. Различие между размещением кода в методах или разных файлах может иметь незначительную разницу в производительности, но вам не стоит об этом беспокоиться.

О единственном языке, который вам сейчас нужен, чтобы заботиться о структурировании "правильно", это Javascript. Потому что он должен быть загружен из сети на компьютер клиента. Вот почему для этого так много компрессоров и обфускаторов. Вещи, как это не сделано с Python, потому что это не нужно.

1 голос
/ 04 ноября 2010

Две вещи:

Код в отдельных модулях компилируется в байт-код при первом запуске и сохраняется как предварительно скомпилированный файл .pyc, поэтому его не нужно перекомпилировать при следующем запуске, если с тех пор источник не был изменен. Это может привести к небольшому повышению производительности, но только при запуске программы.

Кроме того, Python хранит переменные и т. Д. Немного более эффективно, если они размещаются внутри функций, а не на верхнем уровне файла. Но я не думаю, что это то, что вы имеете в виду, не так ли?

...