f():
return 1+2
for _ in range(1000):
print(f())
У меня 1000 раз будет выполняться сложение, или интерпретатор при прочтении функции поймёт, что я две константы складываю, которые невозможно никак изменить, один раз выполнит сложение и просто заменит на return 3?
Нет
А как я здесь изменю?
узнай про dis.dis
Ну конкретно в этом случае сложения двух литералов да, вообще нет
как на счет писать на С ?
Да я понимаю что язык интерпретируемый, а не компилируемый, и оптимизации ждать не стоит, но просто я думал, что операции с литералами это ну совсем очевидно и даже интерпретатор справился бы с такой оптимизацией...
>>> def add(): ... return 1 + 2 ... >>> import dis >>> dis.dis(add) 2 0 LOAD_CONST 1 (3) 2 RETURN_VALUE
Я просто сначала вот этому поверил...
так оптимизаций и нет
Вот это что тогда? Я вижу здесь "загрузить константу и вернуть", никакой второй константы, никакого сложения.
это примитивная оптимизация при генерации байткода, ничего более. то есть это как бы оптимизация, но вообще в питоне их практически нет.
Просто я, когда это прочитал, подумал, что он даже на такое не способен.
Ну вызов функции все равно остался
Это да, но сложения не производится.
Полагаю только потому что литералы были
зато строки оптимизирует, и хранит одинаковые в одном месте
нет. опять таки литералы — это не все строки.
Обсуждают сегодня