Python не такой уж "умный" для избыточных операций

В отличие от многих случаев C++, Python, по-видимому, не так умен для оптимизации избыточных операций, даже между константами.

Я провел простой тест, чтобы проверить math.cos как в цикле, так и вне его.

В этом первом случае Python вычисляет cos (3) 10 миллионов раз:

from datetime import *
from math import *

ini = datetime.now()
for a in range(10000000):
    x = cos(0) 
fim = datetime.now()
print(fim - ini)

Результат примерно 0:00:01.360958.

Теперь, просто заменив x = cos(0) на x = 1 (или просто поместив cos(0) в переменную вне цикла), время про В 3 раза быстрее: 0:00:00.429995

Теперь, если операция cos (0) всегда генерирует константу (1), почему Python не оптимизирует выполнение с помощью кеша, тем самым избегая постоянного повторения одной и той же операции cos?

Одна из философий Python - облегчить жизнь программисту. Но в данном случае происходит как раз обратное.

Вы имеете в виду петля подъема?

Cory Kramer 26.09.2018 19:39

В Python нет такой вещи, как «константа»; все динамично. Таким образом, нет Python не могу оптимизирует повторяющиеся циклы, которые ничего не делают. Потому что, возможно, придет другой поток и назначит что-то еще глобальному cos, что-то, что имеет побочные эффекты, или каждый раз возвращает случайное значение.

Martijn Pieters 26.09.2018 19:39

потому что нельзя все кэшировать? Если вам нужны повторяющиеся единицы - сохраните их сами и повторно используйте сохраненное значение

Patrick Artner 26.09.2018 19:39

Я был бы очень удивлен, если бы какая-либо реализация C++ использовала кеш для cos - я бы ожидал, что он будет либо свернут на константу во время компиляции, либо вычисляться каждый раз во время выполнения (если цикл не будет полностью оптимизирован). Python слишком динамичен, чтобы любая из этих оптимизаций действовала во время компиляции байт-кода.

user2357112 supports Monica 26.09.2018 19:47

Вы говорите ему выполнить cos, и он это делает.

Peter Wood 26.09.2018 19:47

@ Питер Вуд, вот где возникает вопрос «умности», оптимизации производительности. Если бы Python был умнее, он бы создал кеш с результатом (поскольку cos (0) всегда возвращает один и тот же результат)

Rogério Dec 26.09.2018 19:54

Попробуйте поставить на него тайник и посмотрите, как он получит помедленнее. Кеширование платное.

user2357112 supports Monica 26.09.2018 20:42
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
7
39
1

Ответы 1

Потому что вы должны сами это запрограммировать. Именно это имел в виду создатель C++, когда сказал: «Язык более высокого уровня». буквально во ВСЕХ его книгах. (Нет, серьезно, он всегда присутствует в самом начале.) Я не думаю, что Python призван упростить жизнь программистам, но должен быть менее «дорогим», чем языки более высокого уровня.

Не "само собой", а "как таковой".

Peter Wood 26.09.2018 19:48

Вы не имеете в виду. . . . . синтаксический анализ-А?

The_Senate 26.09.2018 19:57

Другие вопросы по теме