Дважды проверьте аргументы произвольного ключевого слова в 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 *_, **__: ...
Другие вопросы по тегам