Будет ли использование меньшего количества обращений к функциям увеличивать скорость общего выполнения? [Дубликат]

1

Возможный дубликат:
Создает ли отдельные функции вместо одного большого медленного времени обработки?

Ооп Блуп!

Да, 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
  • 1
    Предположим, что компилятор умнее вас.
  • 1
    «Да, я знаю, что могу провести тест самостоятельно». Пожалуйста пожалуйста пожалуйста. Сначала запустите тест самостоятельно, чтобы мы знали, о чем вы на самом деле говорите. Мы можем предположить много случайных вещей, мы не знаем, что вы предполагаете.
Показать ещё 5 комментариев
Теги:

3 ответа

3

Запишите его правильно (т.е. с проблемами, должным образом разделенными на отдельные функции и классы), затем используйте PyPy, чтобы сделать его быстрым.

PyPy использует функцию inline и сортирует другие трюки в своем компиляторе Just-In-Time, чтобы ускорить выполнение кода, не делая его недостижимым в названии скорости.

Обратите внимание, что это решение работает только в том случае, если вы используете Python 2.x с любыми поддерживаемыми вами расширениями C, которые вы используете, совместимыми с cpyext.

2

По-видимому, в Python накладные расходы очень высоки.

http://wiki.python.org/moin/PythonSpeed/PerformanceTips#Data_Aggregation

Стоит ли иметь в виду, когда вы выбираете лучший способ написать кусок кода?
Конечно.
Является ли скорость выше, чтобы сделать ваш кодер труднее понять?
Возможно нет.

  • 0
    У меня просто была революционная идея ... В большинстве простых ситуаций я просто использую функции, чтобы просто сделать код проще для чтения, особенно функции, которые содержат большие куски кода. Если использование ООП и вызовов функций предназначено исключительно для лучшего визуального представления, это должна быть работа используемой вами IDE или визуального редактора кода, а не изменение способа работы вашего кода (с использованием ООП, функций и т. Д.)
  • 0
    то есть: кто-то должен создать процедурный дружественный редактор кода, который позволяет минимизировать куски кода (не обязательно те, которые заключены в скобки или отступы), шлепать имя, чтобы определить, что делает этот кусок кода, а затем минимизировать его, таким образом удовлетворяя организационные потребности и сделать код более легким для чтения (таким образом, легче отлаживать, редактировать и т. д.
Показать ещё 3 комментария
0

Python не будет "встроить" эту функцию для вас, поэтому, конечно, есть накладные расходы. Обычно код в функции занимает достаточно времени, чтобы служебные данные вызова были незначительными.

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

Если вам действительно нужна более высокая производительность, обычно лучше написать функцию в C или Cython, чем устранить служебные данные вызова

Также стоит отметить, что обычный код, созданный таким образом

def main():
   ...

if __name__=="main":
    main()

быстрее, чем просто запуск кода на верхнем уровне, поскольку поиск идентификаторов выполняется быстрее в функциях/методах, чем в глобальном пространстве имен

Ещё вопросы

Сообщество Overcoder
Наверх
Меню