Python ключевое слово args vs kwargs
Это может быть простой вопрос:
Есть ли разница между двумя следующими:
def myfunc(a_list = [], **kwargs):
my_arg = kwargs.get('my_arg', None)
pass
а также
def myfucn(a_list = [], my_arg = None):
pass
Если нет, что будет считаться более питоническим?
Спасибо, мат
3 ответа
Для простой функции Pythonic явно определяет ваши аргументы. Если у вас нет законного требования принять любое количество неизвестных или переменных аргументов, **kwargs
метод добавляет ненужную сложность.
Бонус: Никогда не инициализируйте список в определении функции! Это может привести к неожиданным результатам, потому что списки изменчивы!
Второй вариант позволяет передавать my_arg в качестве позиционного, а не ключевого аргумента. Я бы посчитал это бессмысленным объявить **kwargs
когда вы на самом деле не используете их ни для чего.
Первый может принимать практически любые аргументы ключевого слова (независимо от того, что он использует только один из них), тогда как второй может принимать только два. Ни один из них не более Pythonic, вы просто используете тот, который подходит для задачи.
Кроме того, второе - это не "аргументы ключевых слов", а "значение по умолчанию".