ФорумПрограммированиеPython → Why does Python code run faster in a function?

Why does Python code run faster in a function?

  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 21 июля 2012 г. 2:29

    def main():
       for i in xrange(10**8):
           pass
    main()

    This piece of code in Python runs in

    real    0m1.841s
    user    0m1.828s
    sys     0m0.012s

    However, if the for loop isn't placed within a function,

    for i in xrange(10**8):
       pass


    then it runs for a much longer time:

    real    0m4.543s
    user    0m4.524s
    sys     0m0.012s

    Why is this?


    http://stackoverflow.com/questions/11241523/why-does-python-code-run-faster-in-a-function
    Спустя 23 сек.
    The difference is that STORE_FAST is faster (!) than STORE_NAME. This is because in a function, i is a local but at toplevel it is a global.
    adw/0
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 21 июля 2012 г. 3:17, спустя 47 минут 59 секунд

    ааа, ну теперь всё ясно.
    Спустя 14 сек.
    ;)
  • mathete

    Сообщения: 435 Репутация: N Группа: Джедаи

    Spritz 21 июля 2012 г. 5:13, спустя 1 час 55 минут 27 секунд

    А по большому счету это должно быть справедливо для многих, если не для всех языков.
    Тот же js вспомните - откуда пошла параноя оборачивать всё в (function(){})(). Примерно то же самое - глобальные обращения тормознее локальных.
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 21 июля 2012 г. 5:17, спустя 4 минуты 11 секунд

    Тот же js вспомните - откуда пошла параноя оборачивать всё в (function(){})(). Примерно то же самое - глобальные обращения тормознее локальных.

    чтобы не засирать глобальный контекст и ничего более.
  • mathete

    Сообщения: 435 Репутация: N Группа: Джедаи

    Spritz 21 июля 2012 г. 5:28, спустя 10 минут 45 секунд


    Тот же js вспомните - откуда пошла параноя оборачивать всё в (function(){})(). Примерно то же самое - глобальные обращения тормознее локальных.

    чтобы не засирать глобальный контекст и ничего более.

    Ну мы может про разные js говорим? http://www.webreference.com/programming/javascript/jkm3/index.html
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 21 июля 2012 г. 5:37, спустя 9 минут 35 секунд

    васяц имел ввиду, что
    параноя оборачивать всё в

    это точно не изза скорости, а как раз для инкапсуляции локальных переменных. чтобы не получить ошибки одновременного использования глобальных. скорость это уже дело второе. особенно смешно про нее говорить, если мы юзаем вещи аля jqeury обернутые в (fucntion () {})() для скорости :)))
    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 21 июля 2012 г. 5:40, спустя 2 минуты 56 секунд

    ты спас васяца)))
    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 21 июля 2012 г. 5:46, спустя 5 минут 46 секунд


    ты спас васяца)))
    :*
    Спустя 8 сек.
    своих не бросаем :D
    Сапожник без сапог
  • mathete

    Сообщения: 435 Репутация: N Группа: Джедаи

    Spritz 21 июля 2012 г. 5:47, спустя 38 секунд

    1. Да не засирать глобальный контекст это-то понятно априори.
    2. vasa_c сказал, что "ничего более". Я так понял, что он имеет в виду, что на скорость не влияет. Ну я привел ссылку на бенч.
    3. Та же jquery обернута в (function(window, undefined){})(window), как раз для скорости. Ну там внутри кроме jQuery имен и нету и то глобализируется.
  • mathete

    Сообщения: 435 Репутация: N Группа: Джедаи

    Spritz 21 июля 2012 г. 5:55, спустя 8 минут 25 секунд


    А по большому счету это должно быть справедливо для многих, если не для всех языков.


    Я имел в виду конечно же нефункциональные языки. В функциональных языках глобального контекста нет и следовательно нет проблемы :)
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 21 июля 2012 г. 6:00, спустя 5 минут 17 секунд

    mathete, :)
    Сапожник без сапог
  • DanaART

    Сообщения: 28 Репутация: N Группа: Кто попало

    Spritz 18 августа 2012 г. 11:02, спустя 28 дней 5 часов 1 минуту

    Шел я лесом, песню пел.
    Соловей мне на хуй сел.
    Я хотел его поймать
    Улетел ебена мать

Пожалуйста, авторизуйтесь, чтобы написать комментарий!