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

Count = 100000 start = time.time() s = "" for i in range(count):

s += str(i)
print("time1:", time.time() - start)
class S:
pass
s = S()
start = time.time()
s.s = ""
for i in range(count):
s.s += str(i)
print("time2:", time.time() - start)

time1: 0.03569769859313965
time2: 1.8301658630371094

Ребята, привет. А это в питоне можно преодолеть только поменьше обращаясь к полям классов? Или есть более адекватные варианты?

28 ответов

32 просмотра

e = S.s ... S.s = e

dm- Автор вопроса
r nurnu
e = S.s ... S.s = e

Это понятно. Но это простой пример. С реальным кодом и классами такое возможно далеко не всегда.

dm
Это понятно. Но это простой пример. С реальным код...

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

dm- Автор вопроса
r nurnu
Если у тебя в реальном коде циклы с таким количест...

И сильно побольше бывают) Но неприятно удивил такой оверхед при обращении к полям и методам классов. Хотя наверно не стоит много требовать от скриптового языка. Получше баша в поддержке и то хорошо))

1. Складывать строки - в целом дорого. Подозреваю, что в первом случае сработала оптимизация. 2. Замерять короткие промежутки разницей time.time() - фиговая идея. Точность может оказаться плюс-минус полгода.

dm- Автор вопроса
evle
1. Складывать строки - в целом дорого. Подозреваю,...

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

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

А эту дефолтную оптимизацию можно как-то отключить и проверить без нее? Что же касается второго, то замеры делались разными способами. И везде результаты такого же порядка.

dm
Но речь идет не об этом, а о сравнении: сравнении ...

Должны. Оптимизация может банально не срабатывать, когда там атрибут, а не локальная переменная, я не помню, на что там тригерится. А точность - у тебя банально могут случайные результаты с каждым запуском быть. Хорошо если несколько раз запустишь и увидишь. Нет ни одного повода так делать.

dm
А эту дефолтную оптимизацию можно как-то отключить...

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

А не пофиг ли?

dm- Автор вопроса
evle
Должны. Оптимизация может банально не срабатывать,...

Проверялось и на приватных полях. И разными способами через другие методы time, timeit и datetime. Везде результаты такого же порядка. И конечно далеко не на одном запуске.

dm
И сильно побольше бывают) Но неприятно удивил тако...

И ты при этом продолжаешь писать на питоне?

dm- Автор вопроса
Alex
А не пофиг ли?

Бывает нет. Когда циклы на порядки больше приведенного.

Ну и еще вопрос, ты __slots__ используешь в своем классе или нет?

dm- Автор вопроса
Alex
И ты при этом продолжаешь писать на питоне?

Именно поэтому стараюсь и не писать))

dm- Автор вопроса
Alex
Отлично, вот и не пиши

С такими советами ты очень хорош) Но думаю ты прекрасно понимаешь, какие на свете бывают разные задачи и легаси.

dm
С такими советами ты очень хорош) Но думаю ты прек...

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

dm- Автор вопроса
evle
А в список и "".join(...)?

Да, с другими вариантами результаты сильно получше. То есть считаешь таки дефолтные оптимизации так влияют?

dm
Да, с другими вариантами результаты сильно получше...

Я считаю, что не стоит без повода игнорировать давно известные рекомендации и складывать строки в цикле. Влияет ли конкретно здесь добавленная для простых случаев оптимизация - не знаю.

dm- Автор вопроса
evle
Я считаю, что не стоит без повода игнорировать дав...

Но без класса скорость вполне подходит. И бывает даже получше других вариантов. И вот именно эта разница показалась странной.

evle
Я считаю, что не стоит без повода игнорировать дав...

Ну тут то он упирается не в скорость складывания строк, а в доступ к атрибуту объекта

dm- Автор вопроса
dm
Но без класса скорость вполне подходит. И бывает д...

Почему странной? Поиск атрибута в объекте не бесплатная операция.

Alex
Ну тут то он упирается не в скорость складывания с...

Скорость складывания может быть фактором на самом деле.

dm- Автор вопроса
Alex
Почему странной? Поиск атрибута в объекте не беспл...

Понимаю, но не ожидал что настолько дорогая в некоторых случаях

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта