Легко понять, но немного сложнее для 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