Какие знаешь базовые оптимизации
Python
Junior
Без компании
Какие знаешь базовые оптимизации
Ответы
- **Использование генераторов** вместо списков для экономии памяти, особенно при работе с большими данными.
```
# Плохо: создает список в памяти
squares = [x**2 for x in range(1000000)]
# Лучше: генератор
squares_gen = (x**2 for x in range(1000000))
```
- **Кеширование результатов** с помощью `functools.lru_cache` для повторяющихся вычислений.
```
from functools import lru_cache
@lru_cache(maxsize=128)
def fib(n):
if n < 2:
return n
return fib(n-1) + fib(n-2)
```
- **Оптимизация строк** через `join()` вместо конкатенации в циклах.
```
# Плохо: создает много временных строк
result = ""
for s in list_of_strings:
result += s
# Лучше:
result = "".join(list_of_strings)
```
- **Использование `set`** для быстрого поиска (O(1) вместо O(n) у списков).
- **Локальные переменные** в циклах: доступ к ним быстрее, чем к глобальным.
- **Встроенные функции** (`map()`, `filter()`, `sum()`) часто работают быстрее ручных аналогов.
- **Избегание `+` для immutable объектов** (например, кортежи или строки), так как создается новый объект.
- **Профилирование кода** через `cProfile` или `timeit` для точного выявления узких мест.