Возможный дубликат:
Создает ли отдельные функции вместо одного большого медленного времени обработки?
Ооп Блуп!
Да, OOP отлично, держит код чистым и хорошо организованным. Вот почему я люблю его использовать. Я имею в виду OOP очень примитивно в использовании функций (defs).
Извлечет мои вызовы функций и приклеивает содержимое функции прямо к моему algo, увеличит скорость выполнения всего кода? Да, я знаю, что могу сам пройти тест, но я решил задать его здесь на форуме моих коллег-коллег-кодеров, потому что я знаю, что это вопрос, который плавает во многих головах....
def myFunc(var):
return var*3243 #perhaps more complicated function code will make a difference?
i = 0
hungry = True
while hungry:
i = i + 1
x = myFunc(i)
if i > 50:
hungry = False
Запишите его правильно (т.е. с проблемами, должным образом разделенными на отдельные функции и классы), затем используйте PyPy, чтобы сделать его быстрым.
PyPy использует функцию inline и сортирует другие трюки в своем компиляторе Just-In-Time, чтобы ускорить выполнение кода, не делая его недостижимым в названии скорости.
Обратите внимание, что это решение работает только в том случае, если вы используете Python 2.x с любыми поддерживаемыми вами расширениями C, которые вы используете, совместимыми с cpyext
.
По-видимому, в Python накладные расходы очень высоки.
http://wiki.python.org/moin/PythonSpeed/PerformanceTips#Data_Aggregation
Стоит ли иметь в виду, когда вы выбираете лучший способ написать кусок кода?
Конечно.
Является ли скорость выше, чтобы сделать ваш кодер труднее понять?
Возможно нет.
Python не будет "встроить" эту функцию для вас, поэтому, конечно, есть накладные расходы. Обычно код в функции занимает достаточно времени, чтобы служебные данные вызова были незначительными.
Имейте в виду, что гораздо проще тестировать, отлаживать и профилировать программы, разбитые на функции.
Если вам действительно нужна более высокая производительность, обычно лучше написать функцию в C или Cython, чем устранить служебные данные вызова
Также стоит отметить, что обычный код, созданный таким образом
def main():
...
if __name__=="main":
main()
быстрее, чем просто запуск кода на верхнем уровне, поскольку поиск идентификаторов выполняется быстрее в функциях/методах, чем в глобальном пространстве имен