Я не могу найти хорошее простое объяснение того, что делает python по-другому при работе с флагом -O или optimize.Каковы последствия запуска python с флагом оптимизации?
ответ
assert
заявление полностью устранены, так же как заявление блоки формы if __debug__: ...
(так что вы можете поместить код отладки в таких заявлениях блоков и просто работать с -O
, чтобы избежать этого кода отладки).
С -OO
, кроме того, также устраняются докстры.
Насколько это верно в Python 3? –
От the docs:
Когда интерпретатор Python вызывается с флагом -O, оптимизированный код сгенерированы и сохранены в файлах .pyo. Оптимизатор в настоящее время не помогает much; он удаляет только утверждения . Когда используется -O, оптимизируется весь байт-код; .pyc файлы проигнорированы и .py файлы скомпилированы в оптимизированный байт-код.
Передача двух -О флагов интерпретатора Python (-со) заставит байткод компилятор для выполнения оптимизации, которые могли бы в некоторых редких случаях привести к неисправной программ. В настоящее время только
__doc__
строки удаляются из байт-кода, , что приводит к более компактным файлам .pyo. Поскольку некоторые программы могут полагаться на то, что они доступны , вы можете использовать этот параметр только , если знаете, что вы делаете .Программа не работает быстрее, когда считывается из .pyc или .pyo-файла , чем когда он считывается из .py-файла; Единственное, что быстрее примерно .pyc или .pyo файлы - это скорость с , которую они загружают.
Так что, другими словами, почти ничего.
Это несколько зависит от версии Python . Чтобы точно узнать, что это такое , поиск исходного кода для Py_OptimizeFlag. В 2.5, это
- вызывает интерпретатор, чтобы загрузить файлы .pyo, а не .pyc файлы (в ZIP-файлы, просто делает .pyo предпочтительнее .pyc)
- причин
__debug__
иметь значение 0- игнорируемые утверждают операторы в исходном коде
- лечит
__debug__
статический как 0- вызывает байты генераторов коды для сохранения .pyo файлов, нет.Pyc
Как ответил python optimization mode:
питон -О выполняет следующее в настоящее время:
- полностью игнорирует утверждает
- устанавливает специальное встроенное имя
__debug__
Лжи (который по умолчанию является истинным)
и когда называется питоном -со
- удаляет строку документацию из кода
Я не знаю, почему все забывают упомянуть __debug__
вопрос; возможно, это потому, что я единственный, кто его использует :) Конструкция if __debug__
вообще не создает байт-код при работе под -O
, и я нахожу это очень полезным.
Обратите внимание, что этот ответ является точной копией моего ответа в вопросе [этого] (http://stackoverflow.com/questions/2055557/python-optimized-mode) с 13 января 2010 года; в своем ответе на этот вопрос Алекс Мартелли не упомянул конструкцию 'if __debug__', и поэтому мой ответ здесь кажется неуместным (мой« почему все забывают упомянуть »). – tzot
- 1. Каковы последствия/последствия AjaxPro HttpSessionStateRequirement?
- 2. SIGILL при компиляции PHP с флагом оптимизации
- 3. Каковы последствия аннотации @ServiceDependency
- 4. Каковы последствия производительности getElementsByTagName ("*")?
- 5. Каковы последствия скальпинга?
- 6. Каковы плохие последствия ThreadAbortException?
- 7. Каковы последствия ошибки UDP?
- 8. Каковы основные последствия такого наследования?
- 9. Каковы последствия неиспользуемых функций
- 10. Каковы последствия использования FLAG_ACTIVITY_SINGLE_TOP?
- 11. Каковы последствия регистрации метода экземпляра с atexit в Python?
- 12. Каковы последствия убийства скрипта python с помощью SIGHUP?
- 13. Каковы последствия полудуплексных последовательных соединений?
- 14. Каковы последствия переносимости использования NDK?
- 15. Каковы последствия производительности масштабируемого масштабирования?
- 16. Каковы последствия выхода песочницы Angularjs?
- 17. Каковы последствия AddressFilterMode.Prefix (или любого)?
- 18. Каковы последствия использования Maven Snapshots?
- 19. Node.js async parallel - каковы последствия?
- 20. Каковы последствия использования небезопасного кода
- 21. Каковы теоретические последствия неограниченного взгляда?
- 22. Каковы последствия «завинчивания» оператора присваивания?
- 23. Каковы последствия создания HTTP-состояния?
- 24. Каковы последствия не вызова libusb_exit()
- 25. Каковы последствия бутстрапирования нескольких компонентов
- 26. Каковы последствия двойных определений переменных?
- 27. Каковы последствия для переопределения compareTo?
- 28. Каковы последствия не добавления «@Override»?
- 29. Каковы последствия использования токена Mixpanel?
- 30. Каковы последствия использования легких транзакций?
Возможный дубликат [оптимизированный для python режим] (http://stackoverflow.com/questions/2055557/python-optimized-mode) – tzot