Другое

Соглашения об именовании в Python: руководство по snake_case

Изучите соглашения об именовании snake_case для переменных и функций в Python. Полное руководство PEP 8 для разработчиков C#, переходящих на Python. Освойте стандарты кодирования в стиле Python.

Какие соглашения об именовании переменных и функций являются предпочтительными в Python? Я разработчик, пришедший из C#, где camelCase и PascalCase являются общепринятыми, и я заметил, что обе эти конвенции используются в коде на Python. Какие окончательные рекомендации по стилю кодирования существуют для переменных и функций в Python?

Предпочтительное соглашение об именовании в Python для переменных и функций — snake_case (строчные буквы с разделителями-подчеркиваниями), как рекомендуется в PEP 8 — официальном руководстве по стилю Python. Это соглашение отличается от стилей camelCase и PascalCase, commonly используемых в C#, что делает код Python сразу узнаваемым по его характерному шаблону именования. PEP 8 устанавливает snake_case в качестве стандарта для переменных, методов и функций для обеспечения согласованности и читаемости во всей экосистеме Python.

Содержание

Официальные рекомендации PEP 8

Python Enhancement Proposal 8 (PEP 8) служит авторитетным руководством по стилю для кода Python и явно излагает соглашения об именовании для различных элементов кода. Согласно официальной документации PEP 8, “имена функций должны быть в нижнем регистре, слова разделяться подчеркиваниями по мере необходимости для улучшения читаемости”.

Это руководство распространяется не только на функции, но и включает:

  • Переменные: все строчные буквы с подчеркиваниями
  • Имена методов: все строчные буквы с подчеркиваниями
  • Переменные экземпляра: все строчные буквы с подчеркиваниями
  • Параметры функций: все строчные буквы с подчеркиваниями

Руководство по стилю PEP 8 было установлено в качестве авторитетного стандарта для кода Python, обеспечивая согласованность в сообществе Python и делая код более поддерживаемым и читаемым.

Snake_case против соглашений C#

Для разработчиков, переходящих с C# на Python, соглашение об именовании представляет собой значительный стилистический сдвиг. Вот как сравниваются эти соглашения:

Язык Переменные Методы/Функции Классы
Python my_variable calculate_total() MyClass
C# myVariable CalculateTotal() MyClass

Как отмечено в руководстве Real Python, “PEP 8建议使用小写字母和下划线来命名函数和变量(snake_case),使用驼峰式命名法来命名类,使用大写字母和下划线来命名常量。” Это создает визуально отличный шаблон от соглашений camelCase и PascalCase в C#.

Сообщество Python приняло snake_case в качестве стандарта, что сразу позволяет отличать код Python от кода C#. Это соглашение последовательно применяется во стандартной библиотеке и популярных сторонних пакетах.

Подробные правила именования

PEP 8 предоставляет исчерпывающие рекомендации по именованию различных типов идентификаторов:

Переменные и функции

  • Используйте все строчные буквы
  • Разделяйте слова подчеркиваниями
  • Будьте описательны, но лаконичны
  • Избегайте имен переменных из одной буквы, за исключением конкретных контекстов (как счетчики циклов)
python
# Хорошие примеры
user_name = "John"
calculate_total_price()
max_retries = 3

# Плохие примеры
userName = "John"  # Должно быть user_name
CalculateTotalPrice()  # Должно быть calculate_total_price
MAXRETRIES = 3  # Должно быть max_retries

Константы

  • Используйте все заглавные буквы
  • Разделяйте слова подчеркиваниями
  • Обычно определяются на уровне модуля
python
# Константы
MAX_SIZE = 100
CONNECTION_TIMEOUT = 50
DEFAULT_ENCODING = "utf-8"

Имена классов

  • Используйте CamelCase (PascalCase)
  • Начинайте с заглавной буквы
  • Без подчеркиваний между словами
python
# Хорошие имена классов
class UserProfile:
    pass

class DataProcessor:
    pass

Особые случаи

  • Классы исключений: должны заканчиваться на “Error”
  • Тестовые классы: должны начинаться с “Test”
  • Приватные методы: должны начинаться с одного подчеркивания
  • Приватные переменные: должны начинаться с одного подчеркивания

Распространенные исключения и особые случаи

Хотя snake_case является общим правилом, есть несколько важных исключений и особые случаи, о которых следует знать:

Начальные подчеркивания

  • Одно подчеркивание (_private_method) указывает на внутреннее использование
  • Два подчеркивания (__private_method) включают искажение имен (name mangling)
  • Завершающее подчеркивание (class_) используется для避免 конфликтов с ключевыми словами
python
class MyClass:
    def _internal_method(self):
        pass
    
    def __private_method(self):
        pass

Физические и научные приложения

В некоторых специализированных областях делают исключения из стандартных правил. Как отмечено в документации PYLEECAN, “имя метода или переменной может содержать заглавную букву, если и только если оно следует за физическими величинами (radius=R, number=N или Z, length=L и т.д.).”

python
# Исключения для научных вычислений
radius = R  # R - стандартная физическая переменная
number_of_particles = N
length = L

Классы исключений

Классы исключений должны следовать соглашениям именования классов, но с добавлением суффикса “Error”:

python
class ValueError(Exception):
    pass

class FileNotFoundError(Exception):
    pass

Избегайте путаницы в символах

Как упоминается в учебнике DataCamp, “не используйте ‘l’, ‘O’ или ‘I’ в качестве имени переменной из одной буквы: эти символы похожи на ноль (0) и единицу (1) в некоторых шрифтах.”

Практические примеры

Вот исчерпывающие примеры правильных соглашений об именовании в различных контекстах:

Имена модулей/файлов

python
# Имя файла: user_authentication.py
# Не: userAuthentication.py или UserAuthentication.py

Примеры функций

python
# Хорошие имена функций
def calculate_total_amount():
    pass

def get_user_by_id():
    pass

def process_payment():
    pass

# Плохие имена функций
def CalculateTotalAmount():  # Должно быть строчными
    pass

def getUserById():  # Должно быть snake_case
    pass

Примеры переменных

python
# Хорошие имена переменных
user_age = 25
total_revenue = 1500.50
is_active = True
user_list = []

# Плохие имена переменных
userAge = 25  # Должно быть snake_case
totalRevenue = 1500.50  # Должно быть snake_case
isActive = True  # Должно быть snake_case
UserList = []  # Должно быть строчными

Примеры методов

python
class User:
    def get_user_info(self):
        pass
    
    def update_profile(self):
        pass
    
    def _validate_data(self):
        pass  # Приватный метод

Почему Python использует snake_case

Соглашение snake_case в Python не было произвольным — оно было выбрано по нескольким практическим причинам:

Читаемость

Snake_case устраняет необходимость угадывать границы слов в многословных идентификаторах. Как объясняется в руководстве Earth Data Science, “в целом рекомендуется придерживаться стандартных соглашений об именовании в вашем коде. Мы предлагаем соглашение, использующее snake_case и все строчные буквы в вашем коде для имен переменных и функций.”

Согласованность

Использование единого, согласованного стиля именования во всей экосистеме Python делает код более предсказуемым и легким для понимания. Как отмечено в обсуждении Stack Overflow, “время показало, что это довольно… Как упоминалось, PEP 8 говорит использовать lower_case_with_underscores для переменных, методов и функций.”

Исторический контекст

Python был под влиянием языков вроде ABC и Modula-3, которые использовали аналогичные соглашения об именовании. Традиция snake_case поддерживалась на протяжении всей эволюции Python.

Опыт печати

Многие разработчики считают, что snake_case легче печатать последовательно, так как не требует переключения между строчными и заглавными буквами.

Переход с C# на Python

Для разработчиков, приходящих из фона C#, адаптация к соглашениям об именовании Python требует некоторой первоначальной настройки, но становится второй натурой с практикой:

Психологическая адаптация

  • camelCasesnake_case
  • PascalCaseCamelCase (для классов)
  • Именование констант остается похожим, но в верхнем регистре

Процесс проверки кода

При проверке кода Python обращайте особое внимание на шаблоны именования. Как отмечает Скотт Ларсен, “имена модулей (файлов), имена функций, имена методов и (экземплярные) переменные должны все использовать snake_case.”

Настройка IDE

Многие редакторы кода можно настроить на автоматическое преобразование camelCase в snake_case, что упрощает переход.

Практика сообщества

Присоединение к сообществам Python и вклад в открытые проекты помогает закрепить правильные соглашения об именовании через практический опыт.


Заключение

Соглашение snake_case для переменных и функций в Python является авторитетным стандартом, установленным PEP 8, обеспечивающим согласованность и читаемость во всей экосистеме Python. Хотя это может показаться незнакомым вначале, этот стиль именования становится естественным с практикой и предлагает несколько преимуществ в плане читаемости и поддерживаемости. Для разработчиков, переходящих с C#, принятие snake_case — важный шаг к написанию Pythonic-кода, который соответствует стандартам сообщества и лучшим практикам.

Ключевые выводы:

  1. Используйте snake_case для переменных, методов и функций
  2. Используйте CamelCase для имен классов
  3. Используйте UPPER_CASE для констант
  4. Будьте последовательны во всем коде
  5. Следуйте стандарту, чтобы сделать ваш код более читаемым и поддерживаемым

Принимая эти соглашения, вы будете не только следовать официальным рекомендациям Python, но и сделаете ваш код более доступным для других разработчиков Python и лучше интегрируете его в более широкую экосистему Python.

Источники

  1. PEP 8 – Style Guide for Python Code | peps.python.org
  2. How to Write Beautiful Python Code With PEP 8 – Real Python
  3. PEP-8: Python Naming Conventions & Code Standards | DataCamp
  4. Clean Code Syntax for Python: Introduction to PEP 8 Style Guide | Earth Data Science
  5. What is the naming convention in Python for variables and functions? - Stack Overflow
  6. PEP 8 : Coding Style guide in Python - GeeksforGeeks
  7. Coding convention — PYthon Library for Electrical Engineering Computational ANalysis
  8. Mastering PEP 8: Python Code Style Guide Essentials - llego.dev
  9. Python Coding in Style: PEP 8 - Medium
  10. An Overview of The PEP 8 Style Guide | Towards Data Science
Авторы
Проверено модерацией
Модерация