No history yet

Синтаксис и типизация

Чистый код и PEP 8

В Python читаемость кода — не просто хорошая практика, а часть философии языка. Вместо скобок для определения блоков кода, как в C++ или Java, Python использует отступы. Это заставляет писать визуально структурированный код. Каждый новый уровень вложенности требует дополнительного отступа, обычно в четыре пробела.

Правила оформления кода собраны в документе под названием . Это официальное руководство по стилю, которому следует большинство разработчиков. Следование ему делает ваш код понятным для коллег и для вас самих в будущем. Он охватывает всё: от длины строк (не более 79 символов) до именования переменных (snake_case) и использования пробелов вокруг операторов.

# Плохой пример: смешанные отступы и отсутствие пробелов
def calculate_sum(a,b):
  result=a+b
  return result

# Хороший пример: согласно PEP 8
def calculate_sum(a, b):
    """Эта функция суммирует два числа."""
    result = a + b
    return result

Динамическая типизация и ссылки

Если вы пришли из статически типизированных языков, вроде Java или C#, Python может показаться непривычной. В Python тип данных связан не с переменной, а с объектом в памяти. Переменная — это всего лишь имя, или ссылка, указывающая на этот объект. Вы можете легко переназначить переменную, чтобы она указывала на объект совершенно другого типа.

# Переменная 'data' сначала ссылается на целое число
data = 100
print(type(data))

# Теперь та же переменная ссылается на строку
data = "Hello, Python!"
print(type(data))

# А теперь — на список
data = [1, 2, 3]
print(type(data))

Представьте, что в памяти есть коробки с разными вещами: одна с числом, другая со строкой. Переменная — это просто стикер с именем, который вы можете переклеивать с одной коробки на другую. Когда на коробку не остается ни одного стикера, сборщик мусора Python удаляет её.

Продвинутое форматирование

Забудьте про старые способы форматирования строк через % или метод .format(). С версии Python 3.6 стандартным и наиболее удобным способом стали f-строки (форматированные строковые литералы). Они позволяют встраивать выражения прямо в строку, делая код чище и интуитивнее.

import math

name = "Alice"
_items = 3
price = 49.95

# Простое встраивание переменных
print(f"Пользователь {name} купил(а) {_items} предмета.")

# Встраивание выражений и вызовов функций
total_cost = _items * price
print(f"Общая стоимость: {total_cost:.2f} 💲")

# Можно использовать и более сложные выражения
print(f"Значение pi, округленное до 3 знаков: {math.pi:.3f}")

Моржовый оператор и краткость

В Python 3.8 появился новый синтаксис — выражения присваивания, также известные как :=. Он позволяет присвоить значение переменной прямо внутри выражения. Это помогает избежать дублирования кода и сделать его более лаконичным, особенно в циклах while или в условных конструкциях.

Классический пример — чтение файла построчно, пока строки не закончатся.

# Без оператора моржа
while True:
    line = file.readline()
    if not line:
        break
    print(line)

# С оператором моржа
while (line := file.readline()):
    print(line)

Другой инструмент для написания краткого кода — условные выражения, также известные как тернарный оператор. Они позволяют записать простую конструкцию if-else в одну строку. Это удобно для присваивания значений или в выражениях lambda.

# Стандартная запись
status_code = 200
if status_code == 200:
    status_message = "OK"
else:
    status_message = "Error"

# С условным выражением
status_message = "OK" if status_code == 200 else "Error"

Пришло время проверить, как вы усвоили материал.

Quiz Questions 1/6

Что в Python используется для определения блоков кода вместо фигурных скобок, как в Java или C++?

Quiz Questions 2/6

Согласно руководству по стилю PEP 8, какая рекомендуемая максимальная длина строки кода?

Освоение этих идиоматических особенностей Python поможет вам писать не просто работающий, а по-настоящему чистый и эффективный код.