⚡ Кратко
Используйте with open(...) вместо ручного close(), for вместо индексов, генераторы вместо промежуточных списков.
Ручное закрытие файла vs with
❌ Старый подход
f = open("data.txt", "r")
content = f.read()
f.close()
✅ Современный подход
with open("data.txt", "r") as f:
content = f.read()
Индексы vs for
❌ С индексами
for i in range(len(words)):
print(words[i])
✅ Через итератор
for word in words:
print(word)
Список vs генератор
❌ Лишняя память
result = [x ** 2 for x in range(10**6)]
print(any(r > 100 for r in result))
✅ Генератор
result = (x ** 2 for x in range(10**6))
print(any(r > 100 for r in result))