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