1. Обмен переменных без временной переменной

1. Обмен переменных без временной переменной


Лайфхаки в Python: Советы для Эффективного и Элегантного Кода
Python известен своей простотой и читабельностью, но даже опытные разработчики могут не знать всех трюков, которые делают код лаконичнее и эффективнее. В этой статье — подборка лайфхаков, которые помогут писать на Python быстрее и с удовольствием.


1. Обмен переменных без временной переменной

Забыть про temp = a! В Python можно менять значения переменных одной строкой:

a, b = 10, 20
a, b = b, a  # Теперь a = 20, b = 10

2. Распаковка элементов

Используйте * для распаковки списков и кортежей:

first, *rest, last = [1, 2, 3, 4, 5]
print(first)  # 1
print(rest)   # [2, 3, 4]
print(last)   # 5

Также ** распаковывает словари в аргументы функции:

def greet(name, age):
    print(f"{name} is {age} years old")

user = {"name": "Alice", "age": 30}
greet(**user)  # Alice is 30 years old

3. List Comprehensions и Генераторы

Создавайте списки, словари и множества в одну строку:

squares = [x**2 for x in range(10)]  # [0, 1, 4, ..., 81]

Генераторы экономят память, так как элементы вычисляются «на лету»:

gen = (x**2 for x in range(10))  # Не хранит весь список в памяти

4. Использование enumerate и zip

Получайте индекс и значение в цикле с enumerate:

fruits = ["apple", "banana", "cherry"]
for idx, fruit in enumerate(fruits, start=1):
    print(f"{idx}. {fruit}")

Объединяйте списки с zip:

names = ["Alice", "Bob"]
ages = [25, 30]
for name, age in zip(names, ages):
    print(f"{name} is {age}")

5. Словари: get, setdefault, defaultdict

Избегайте KeyError с методом get():

user = {"name": "Alice"}
age = user.get("age", 30)  # 30 (значение по умолчанию)

setdefault устанавливает значение, если ключа нет:

user.setdefault("age", 30)  # Теперь user["age"] = 30

Для сложных случаев используйте defaultdict:

from collections import defaultdict
counts = defaultdict(int)  # Дефолтное значение 0
counts["a"] += 1  # Не вызывает ошибку

6. F-строки для Форматирования

С Python 3.6+ форматирование стало проще:

name = "Alice"
age = 30
print(f"{name} is {age} years old. Next year: {age + 1}")

7. Оператор := (Морж)

С Python 3.8+ можно присваивать значения в выражениях:

while (line := input("Введите текст: ")) != "стоп":
    print(f"Вы ввели: {line}")

8. Игнорирование значений с _

Если какое-то значение не нужно, используйте _:

x, _, z = (1, 2, 3)  # Игнорируем второй элемент

9. Контекстные менеджеры

Автоматически закрывайте файлы и управляйте ресурсами:

with open("file.txt", "r") as file:
    content = file.read()
# Файл закрыт автоматически

10. Сортировка с ключом

Используйте key в сортировке для кастомных правил:

users = [{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}]
sorted_users = sorted(users, key=lambda x: x["age"])

Заключение
Эти лайфхаки не только делают код короче, но и повышают его читабельность и эффективность. Экспериментируйте, применяйте их в проектах и открывайте для себя новые возможности Python! Помните: лучший код — не обязательно самый сложный, а тот, который легко понять и поддерживать. 🐍