Важно точно называть функции. Название функции должно быть понятным. Название функции не должно обманывать. Из названия функции должно быть ясно, что она делает. Функция - это действие, поэтому название функции должно начинаться с глагола.


Пример 1

Название должно прояснять суть того, что делает функция, и каким будет результат.

Плохо:


def get(book_name, books_folder_path):
...
return book

Плохо:


def get_something(book_name, books_folder_path):
...
return book

Хорошо:


def get_book(book_name, books_folder_path):
...
return book


Пример 2

Название функции не может быть одиночным существительным. Функция - это действие, поэтому название её всегда должно начинаться с лексического глагола.

Плохо:


def book(book_name, books_folder_path):
...
return book

Хорошо:


def get_book(book_name, books_folder_path):
...
return book


Пример 3

В названии этой функции вообще не раскрыто ключевое действие.

Плохо:


def soon_birthday(args):
...
return birthday_datetime

Хорошо:


def calculate_birthday(args):
...
return birthday_datetime


Пример 4

Данная функция рассчитывает именно площадь круга, значит стоит отразить это в названии.

Плохо:


from math import pi

def calculate_area(radius):
    circle_area = pi * (radius ** 2)
    return circle_area

Хорошо:


from math import pi

def calculate_circle_area(radius):
    circle_area = pi * (radius ** 2)
    return circle_area


Пример 5

get обещает, что мы что-то получим, но ничего не говорит о том, что будет происходить вычисление.

Плохо:


class Employee:

def __init__(self, name, salary, bonus_percentage, is_good_employee):
    self.name = name
    self.salary = salary
    self.bonus_percentage = bonus_percentage
    self.is_good_employee = is_good_employee
    self.bonus = 0

def get_salary(self):
    self.bonus = self.get_bonus()
    return self.salary + self.bonus

def get_bonus(self):
    if self.is_good_employee:
        return self.salary * (self.bonus_percentage / 100)
    return 0

Хорошо:


class Employee:

def __init__(self, name, salary, bonus_percentage, is_good_employee):
    self.name = name
    self.salary = salary
    self.bonus_percentage = bonus_percentage
    self.is_good_employee = is_good_employee
    self.bonus = 0

def calculate_full_salary(self):
    self.bonus = self.calculate_bonus()
    return self.salary + self.bonus

def calculate_bonus(self):
    if self.is_good_employee:
        return self.salary * (self.bonus_percentage / 100)
    return 0


Пример 6

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

Исключение:


from django.contrib import admin

class ProductAdmin(admin.ModelAdmin):
    ...

    def response_add(self, request, obj, post_url_continue=None):
        # Дополнительная логика
        ...
        return super().response_add(request, obj, post_url_continue)

    def response_change(self, request, obj):
        # Дополнительная логика
        ...
        return super().response_change(request, obj)