Легко понять, но немного сложнее для Google

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

Однако вскоре я нашел интересное определение:

def get_multi(self, db_session, *, skip=0, limit=100):

В целом довольно просто — у меня есть функция для получения нескольких записей из некоторой базы данных, мне нужно передать ей сеанс моей базы данных и указать, с чего начать (пропустить) и сколько вернуть (ограничить). Я искал ссылки на этот метод в кодовой базе, которую просматривал, и не мог найти какой-либо конкретной ссылки или действия, которое вызывал этот bare*… почему он там??

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

Итак, благодаря наличию этой голой звездочки приведенное выше определение вызовет TypeError, если вы попытаетесь вызвать get_multi(SomeSession(), 10, 50). Без этой звездочки 10 и 50 были бы неявно назначены аргументам ключевого слова skip & limit.

Подробнее о звездочке в питоне: https://medium.com/understand-the-python/understanding-the-asterisk-of-python-8b9daaa4a558