Дважды проверьте аргументы произвольного ключевого слова в Python
Я новичок в Python и изучаю фреймворк с открытым исходным кодом, написанный на Python. Я пытаюсь немного глубже погрузиться в исходный код. Я не могу понять, почему в этой строке кода требуются " произвольные аргументы " и " произвольные аргументы ключевого слова ":
observerCallback = lambda *args, **kwargs: self.pushRender(realViewId)
в основном потому, что, в конце концов, они не используются в "вызываемом" методе:
def pushRender(self, vId, ignoreAnimation = False):
...
Итак, еще раз: какова цель использования здесь *args и **kwargs? Я знаю, что это может показаться глупым вопросом, но я только что узнал значение этих "специальных операторов", и мой мозг почти не работает после нескольких дней, потраченных на изучение этого исходного кода. Если кто-то может помочь мне понять немного лучше, я, конечно, очень ценю это.
1 ответ
Звонящий изobserverCallback
вероятно, передает некоторые аргументы функции, поэтому функция должна их принять. В противном случае это могло бы произойти:
>>> observerCallback = lambda: self.pushRender(realViewId)
>>> observerCallback('foo', bar='baz')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: <lambda>() got an unexpected keyword argument 'bar'
Этот конкретный observerCallback
просто предпочитает игнорировать / не использовать переданные аргументы. По соглашению вы должны использовать_
вместо того "args
" а также "kwargs
"как индикатор того, что вы собираетесь игнорировать эти аргументы:
lambda *_, **__: ...