170 похожих чатов

А интерпретатор никак не оптимизирует код? Например, если я сделаю: def

f():
return 1+2
for _ in range(1000):
print(f())
У меня 1000 раз будет выполняться сложение, или интерпретатор при прочтении функции поймёт, что я две константы складываю, которые невозможно никак изменить, один раз выполнит сложение и просто заменит на return 3?

18 ответов

15 просмотров

Нет

S0ZDATEL- Автор вопроса

А как я здесь изменю?

узнай про dis.dis

Ну конкретно в этом случае сложения двух литералов да, вообще нет

как на счет писать на С ?

S0ZDATEL- Автор вопроса
Alex
как на счет писать на С ?

Да я понимаю что язык интерпретируемый, а не компилируемый, и оптимизации ждать не стоит, но просто я думал, что операции с литералами это ну совсем очевидно и даже интерпретатор справился бы с такой оптимизацией...

S0ZDATEL
Да я понимаю что язык интерпретируемый, а не компи...

>>> def add(): ... return 1 + 2 ... >>> import dis >>> dis.dis(add) 2 0 LOAD_CONST 1 (3) 2 RETURN_VALUE

S0ZDATEL- Автор вопроса
Tishka17
Нет

Я просто сначала вот этому поверил...

S0ZDATEL- Автор вопроса
Alex
>>> def add(): ... return 1 + 2 ... >>> import d...

Вот это что тогда? Я вижу здесь "загрузить константу и вернуть", никакой второй константы, никакого сложения.

S0ZDATEL
Вот это что тогда? Я вижу здесь "загрузить констан...

это примитивная оптимизация при генерации байткода, ничего более. то есть это как бы оптимизация, но вообще в питоне их практически нет.

S0ZDATEL- Автор вопроса
Tishka17
Нет

Просто я, когда это прочитал, подумал, что он даже на такое не способен.

S0ZDATEL- Автор вопроса
Tishka17
Ну вызов функции все равно остался

Это да, но сложения не производится.

S0ZDATEL
Это да, но сложения не производится.

Полагаю только потому что литералы были

S0ZDATEL
Это да, но сложения не производится.

зато строки оптимизирует, и хранит одинаковые в одном месте

Дмитро Козак
зато строки оптимизирует, и хранит одинаковые в од...

нет. опять таки литералы — это не все строки.

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта