@ru_python

Страница 9501 из 9768
Alex
03.07.2019
14:13:40
лучше сразу сделать нормальный сервис

Denis
03.07.2019
14:15:36
+1
как легко распознать человека старше 25

Tishka17
03.07.2019
14:17:35
def do0(): return { i: i for i in range(10) } orig = {} def do2(): res = deepcopy(orig) for i in range(10): res[i] = i return res второй метод работает в несколько раз медленее. Как можно ускорить?

Google
Bogdan (SirEdvin)
03.07.2019
14:17:53
Опциональным ключем?

Tishka17
03.07.2019
14:18:43
полная версия кода: https://github.com/Tishka17/dataclass_factory/blob/feature/flatten/dataclass_factory/serializers.py#L23

Bogdan (SirEdvin)
03.07.2019
14:23:06
эм?
Мне казалось, что deepcopy нужен только в ряде случаев. Вот и включить опциональную логику для этого

Tishka17
03.07.2019
14:23:31
ну у меня уже есть один if. В данном случае нужен именно deepcopy

это упрощенная версия кода просто

Tishka17
03.07.2019
14:28:59
.update?
вообще там будет несколько словарей просто, поэтому такой код

Google
Tishka17
03.07.2019
14:29:06
очень плохой пример получился, да

Futorio
03.07.2019
14:29:55
Скорее всего никак так как ты в первом случае создаёшь просто словарь, а во втором нужно обойти рекурсивно словарь и создать новый

Tishka17
03.07.2019
14:32:02
orig = [{}] * 10 def do2(): res = deepcopy(orig) for d, i in zip(res, range(10)): d[i] = i return res

вот на самом деле правильный код

Aragaer
03.07.2019
14:32:10
ээм

Tishka17
03.07.2019
14:32:13
он ещё медленнее

Aragaer
03.07.2019
14:32:18
тут у тебя список с 10 ссылками на один словарь

Tishka17
03.07.2019
14:32:32
да, на самом деле это 10 ссылок на разные места в иерархии

просто лень в тесте воспроизводить

koder
03.07.2019
14:32:48
да, на самом деле это 10 ссылок на разные места в иерархии
если тебе адски нужно максимально ускориться - генери код

Aragaer
03.07.2019
14:32:48
а

ну и вместо зипа с рейнджом надо энумерейт

но не суть

Tishka17
03.07.2019
14:33:01
ходить каждый раз по иерархии - ещё медленнее

koder
03.07.2019
14:33:03
прямо разверни цикл через ast + compile

Tishka17
03.07.2019
14:33:23
вариант конечно, но я хотел по максимуму это избежать

Aragaer
03.07.2019
14:33:46
так, получается у тебя есть большой разветвленный словарь и есть массив ссылок в эту иерархию

Tishka17
03.07.2019
14:33:56
да, я дла оптимизации это сделал

Aragaer
03.07.2019
14:34:02
ты хочешь сделать клон этого словаря и в новой версии модифицировать эти места?

Google
Tishka17
03.07.2019
14:34:06
угу

koder
03.07.2019
14:34:13
на самом деле не так сложно и не очень криво. На исходный текст, а именно ast. Зато будет максимально быстро. Но таки да, сложновастее

Aragaer
03.07.2019
14:36:30
копировать без deepcopy не выйдет. Но тогда копировать надо всего один раз, нет?

koder
03.07.2019
14:37:27
> https://github.com/Tishka17/dataclass_factory/blob/feature/flatten/dataclass_factory/serializers.py#L34 я вот тут попой чую, что c - это хитрая ссылка на containers. Но понять это из кода не могу

Aragaer
03.07.2019
14:38:41
ну кстати...

ты можешь действительно хранить не "ссылки на места в иерархии", а "функции. которым можно скормить иерархию, и получить места"

Tishka17
03.07.2019
14:39:15
ну с таким ссылками у меня 15 секунд, без них - больше 20. С плоским словарем - 1 секунда

эм

что это даст?

Aragaer
03.07.2019
14:39:35
то есть надо функцию, которая принимает путь в иерархии и возвращает функцию, которая принимает иерархию, возвращает место

тогда тебе надо будет делать одну дипкопи иерархии, а массив функций переиспользовать

Tishka17
03.07.2019
14:39:51
не понимаю как это юзать

ну я исходил из предположения что deepcopy со ссылками будет быстрее чем аждый раз искать по иерархии места

Aragaer
03.07.2019
14:40:54
def do2(locations, orig_hier): new_hier = deepcopy(orig_hier) for i, loc in enumerate(locations): loc(new_hier) = i return new_hier

Tishka17
03.07.2019
14:41:15
эм

у нас питон

Aragaer
03.07.2019
14:42:34
ок. loc(new_hier) возвращает объект, у которого есть методы get и set

Google
Aragaer
03.07.2019
14:42:42
loc(new_hier).set(i)

Tishka17
03.07.2019
14:43:18
это медленно

Aragaer
03.07.2019
14:43:25
ты попробовал?

Tishka17
03.07.2019
14:43:32
тут вызов двух функций и ещё поиск метода set

это ещё непонятно что внутри функции будет делаться

Aragaer
03.07.2019
14:43:55
по-моему самое медленное это вызов deepcopy

Vadim
03.07.2019
14:44:23
Здравствуйте в джанго можно расширить юзера двумя способами, унаследовать от абстракт юзера и создать новую модель с OneToOneField на дефаулт юзера, подскажите какие выгоды/недостатки от обоих?

Admin
ERROR: S client not available

Aragaer
03.07.2019
14:45:58
ну ... я бы сделал так class wrapped(item, key): def get(self): return item[key] def set(self, val): item[key] = val def make_location(path): def inner(hier): root = hier for p in path[:-1]: root = root[p] return wrapped(root, path[-1]) return inner

Tishka17
03.07.2019
14:46:16
по-моему самое медленное это вызов deepcopy
LOL. Заново сконструировать всю структуру оказывается в 4 раза быстрее чем юзать deepcopy

Aragaer
03.07.2019
14:46:18
я не проверял, это может не работать 8)

Futorio
03.07.2019
14:46:33
Какие-то преступления против питона сейчас происходят

Yana
03.07.2019
14:46:39
#работа #Украина (офис в Харькове, релокейтим\ в будущем можно в США) #офис Привет, ребят, приглашаю в Akvelon #Lead и #Senior Python разработчиков - вакансия для тех, у кого есть желание возглавить и развивать новое для компании направление\стать лидом команды\техническим ментором Делаем проект с нуля - Employee Performance Management система, выбор технологий за лидом. -> Ideal candidate will act as a back-end developer who will work on business logic of the application and overall product architecture. ЗП - $3 - 5K, обсуждаем варианты.

Futorio
03.07.2019
14:46:44
с гетами, сетами

Aragaer
03.07.2019
14:47:01
да, наверно надо через геттер и сеттер это сделать как-то

Alex
03.07.2019
14:47:08
Google
Yana
03.07.2019
14:47:59
я уже готовила оффер))

Alex
03.07.2019
14:48:12
я уже готовила оффер))
вот прямо сразу оффер? отчаяно вам питонасты нужны

Какого Бля
03.07.2019
14:48:19
Bogdan (SirEdvin)
03.07.2019
14:48:26
То есть оно тоже самое делает, и еще что-то сверху

Yana
03.07.2019
14:48:52
а киев есть?
разве что удаленно из Киева)

Tishka17
03.07.2019
14:48:53
а я сделал через pickle

Tishka17
03.07.2019
14:49:05
да блин!

работает!

всего 2 раза медленнее чем плоский словарь

и в 10 раз быстрее чем deepcopy

Aragaer
03.07.2019
14:49:49
ща выяснится, что через json будет еще быстрее

Tishka17
03.07.2019
14:49:54
доин раз сделал dumps и потом loads

так что без обхода иерархии сразу в нужные места вставляю

Futorio
03.07.2019
14:50:17
А что сразу через пикл не сделать было

Страница 9501 из 9768