result = {}
times = time.time()
for name, info in deepcopy(table_names).items():
result[[name.replace(old, new) for old, new in dict_words.items()][0]] = info
print(time.time() - times)
return result
def normalize(name: str):
for old, new in dict_words.items():
name = name.replace(old, new)
return name
с применением функции normalize() работает медленнее на 0.3-0.6 секунды, почему получается так, что генератор быстрее работает? кто может объяснить простым языком?
дело в выделении памяти на доп. функцию?
или в доп. строках кода для GIL? по которым, соответственно, он ходит дольше?
При чем тут gil?
рекомендую измерять через timeit
Не надо редактировать проверяемый код и больше возможностей
серьезно, если хочешь чтобы тебе подсказали - объясни что это код делает. Я вижу две функции, которые делают совершенно разное, что сравниваем?
Потому что list comprehension (то что ты генератором назвал) работает быстрее чем аналогичный цикл for ... in Вот пример: N = 10**7 start = time.time() comprehension_test = [i for i in range(N)] print(time.time() - start) start = time.time() result = [] for i in range(N): result.append(i) print(time.time() - start) Второй вариант отрабатывает в среднем вдвое дольше первого В интернетах пишут что операция append в list comprehension как то оптимальнее работает То есть такой вариант лучше если очень большое количество append'ов
только тут append, а там работа со строками
я так понял вопрос был в том почему скорость падает если заменить [name.replace(old, new) for old, new in dict_words.items()] на вызовы normalize
так они не взаимозаменяемые
хз как ты измерял
меня интересует CAPI & CPython
Обсуждают сегодня