
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

Denis
03.07.2019
14:19:38
я обычно такие штуки решаю нумбой
ы

Проксимов
03.07.2019
14:22:11

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

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

koder
03.07.2019
14:28:42
или я не понял что именно оптимизировать

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

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. Но понять это из кода не могу

Tishka17
03.07.2019
14:37:28
ну при каждой сериализации данных, да

Denis
03.07.2019
14:38:30

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

Tishka17
03.07.2019
14:44:47

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

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

Какого Бля
03.07.2019
14:47:20
я пошутил
но москва надоела

Google

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

Alex
03.07.2019
14:48:12

Какого Бля
03.07.2019
14:48:19

Tishka17
03.07.2019
14:48:25

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

Yana
03.07.2019
14:48:52

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

Alex
03.07.2019
14:48:59

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
А что сразу через пикл не сделать было