Нет смысла использовать *args и/или **kwargs в функциях или методах, у которых известны аргументы. Это только снижает читаемость кода и его понимание. Использование *args и/или **kwargs не даёт информации об аргументах функции, IDE не подсказывает, какие параметры можно передать в функцию, тем самым, повышается риск передачи лишних или неправильных параметров. Используйте *args и/или **kwargs, когда их гибкость оправдана, например, для обёрток, декораторов или для передачи множества дополнительных параметров.


Пример 1

Плохо:


def add_numbers(*args):
    if len(args) != 2:
        raise ValueError('Функция ожидает ровно два аргумента')
    return args[0] + args[1]

result = add_numbers(3, 7)

Хорошо:


def add_numbers(num1, num2):
    return num1 + num2

result = add_numbers(3, 7)


Пример 2

Плохо:


def create_user(**kwargs):
    username = kwargs.get('username')
    email = kwargs.get('email')
    age = kwargs.get('age')

    if not username or not email:
        raise ValueError('username and email are required')
    return {
        'username': username,
        'email': email,
        'age': age if age else 'unknown',
    }

user1 = create_user(username='john_doe', email='john@example.com', age=30)
user2 = create_user(username='jane_doe', email='jane@example.com')

Хорошо:


def create_user(username, email, age=None):
    if not username or not email:
        raise ValueError('username and email are required')
    return {
        'username': username,
        'email': email,
        'age': age if age else 'unknown',
    }

user1 = create_user(username='john_doe', email='john@example.com', age=30)
user2 = create_user(username='jane_doe', email='jane@example.com')


Пример 3

Не всегда мы можем видеть args и kwargs в параметрах функции: такой нейминг - лишь соглашение между программистами. Иногда название может быть другим.

Плохо:


def display_user_info(user_info):
name = user_info.get('name')
age = user_info.get('age')
work = user_info.get('work')
...

Хорошо:


def display_user_info(name, age, work):
...